JavaScript按位运算符的应用简析


Posted in Javascript onFebruary 04, 2014

大多数语言都提供了按位运算符,按位运算符在c,c++等语言中运用广泛,而在JS,AS等脚本语言中则没有太多的应用例子,有时候,适当的使用按位运算符会取得很好的效果。
下面根据自己的认知简单的谈一下js中的位操作使用(同样适用于其他语言),如果有错误,欢迎指正。

按位运算符是把操作数看作一系列单独的位,而不是一个数字值。所以在这之前,不得不提到什么是“位”:
数值或字符在内存内都是被存储为0和1的序列,每个0和1被称之为1个位,比如说10进制数据2在计算机内被存储为 0 0 0 0 0 0 1 0,当我们将内存内的位值改变之后,这个值代表的意义也就变了,比如把2前移动一位, 现在存储单元里面变成了0 0 0 0 0 1 0 0,这个值表示的是十进制的4,这也就是按位操作符的运算原理。

按位运算符有6个
& 按位与
|按位或
^按位异或
~取反
>>右移
<<左移

1 & 运算符
&是二元运算符,它以特定的方式的方式组合操作数中对应的位 如果对应的位都为1,那么结果就是1, 如果任意一个位是0 则结果就是0
1 & 3的结果为1
来看看它的怎么运行的:
1的二进制表示为 0 0 0 0 0 0 1
3的二进制表示为 0 0 0 0 0 1 1
根据 & 的规则 得到的结果为 0 0 0 0 0 0 0 1,十进制表示就是1

只要任何一位是0 &运算的结果就是 0,所以可以用&把某个变量不必要的位设为0, 比如某个变量的二进制表示为 0 1 0 0 1 0 0 1, 我想保留低4位,消除高4位 用 & 0x0F就可以了(住:0x0F为16进制表示法,对应的二进制为 0 0 0 0 1 1 1 1),这个特性有个很重要的应用,在后面会提到。

2 | 运算符
| 跟 & 的区别在于 如果对应的位中任一个操作数为1 那么结果就是1
1 | 3 的结果为3

3 ^ 运算符
^运算符跟 | 类似,但有一点不同的是 如果两个操作位都为1的话,结果产生0
0 1 0 0 0 0 0 1
0 1 0 1 1 0 1 0
产生 0 0 0 1 1 0 1 1

4 ~ 运算符
~是对位求反 1变0, 0变1

5 移位运算符移位运算符把位按指定的值向左或向右移动
<< 向左移动 而 >> 向右移动,超过的位将丢失,而空出的位则补0

如 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1(十进制16387) 向左移动两位将变成
0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 (十进制12)
向右移动两位则是
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0(十进制4096)

下面介绍一些具体的应用
前面提到2向前移动1位变成4 利用这个特性可以做乘法运算
2 << 1 =4
3 << 1 = 6
4 << 1 = 8
同理 >> 则可以做除法运算

任何小数 把它 >> 0可以取整
如3.14159 >> 0 = 3;

^运算服有个神奇的特性
如以下代码

<script>
var n1 = 3;
var n2 = 4;
n1 ^= n2;
n2 ^= n1;
n1 ^= n2;
</script>
Javascript 相关文章推荐
jQuery 添加/移除CSS类实现代码
Feb 11 Javascript
基于jquery的15款幻灯片插件
Apr 10 Javascript
关于js拖拽上传 [一个拖拽上传修改头像的流程]
Jul 13 Javascript
Extjs 4.x 得到form CheckBox 复选框的值
May 04 Javascript
JavaScript实现的简单拖拽效果
Jun 01 Javascript
不想让浏览器运行javascript脚本的方法
Nov 20 Javascript
基于JavaScript实现动态添加删除表格的行
Feb 01 Javascript
jQuery判断浏览器并动态调整select宽度的方法
Mar 02 Javascript
jQuery针对input的class属性写了多个值情况下的选择方法
Jun 03 Javascript
JS实现保留n位小数的四舍五入问题示例
Aug 03 Javascript
在Vue中使用axios请求拦截的实现方法
Oct 25 Javascript
javascript中的event loop事件循环详解
Dec 14 Javascript
Javascript 按位取反运算符 (~)
Feb 04 #Javascript
jQuery操作CheckBox的方法介绍(选中,取消,取值)
Feb 04 #Javascript
jquery操作复选框(checkbox)的12个小技巧总结
Feb 04 #Javascript
jquery 获取dom固定元素 添加样式的简单实例
Feb 04 #Javascript
jquery判断元素的子元素是否存在的示例代码
Feb 04 #Javascript
jquery中get,post和ajax方法的使用小结
Feb 04 #Javascript
jquery中get和post的简单实例
Feb 04 #Javascript
You might like
php文档更新介绍
2011/07/22 PHP
调整PHP的性能
2013/10/30 PHP
浅谈php扩展imagick
2014/06/02 PHP
PHP两个n位的二进制整数相加问题的解决
2018/08/26 PHP
PHP解析url并得到url参数方法总结
2018/10/11 PHP
PHP7 echo和print语句实例用法
2019/02/15 PHP
JS显示下拉列表框内全部元素的方法
2015/03/31 Javascript
JS解析XML文件和XML字符串详解
2015/04/17 Javascript
javascript引用类型之时间Date和数组Array
2015/08/27 Javascript
javascript作用域链(Scope Chain)用法实例解析
2015/11/30 Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
2016/09/20 Javascript
jQuery实现点击某个div打开层,点击其他div关闭层实例分析(阻止冒泡)
2016/11/18 Javascript
详解NodeJs支付宝移动支付签名及验签
2017/01/06 NodeJs
jQuery ajax实现省市县三级联动
2021/03/07 Javascript
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
使用Vue做一个简单的todo应用的三种方式的示例代码
2018/10/20 Javascript
jQuery选择器选中最后一个元素,倒数第二个元素操作示例
2018/12/10 jQuery
layui监听下拉选框选中值变化的方法(包含监听普通下拉选框)
2019/09/24 Javascript
JS中的继承操作实例总结
2020/06/06 Javascript
[00:53]TI3正赛第三天 DK怒破A队不败金身 现场国旗飘扬热血激昂
2013/08/10 DOTA
举例讲解Python中的迭代器、生成器与列表解析用法
2016/03/20 Python
Python使用遗传算法解决最大流问题
2018/01/29 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
2018/11/06 Python
pyqt5使用按钮进行界面的跳转方法
2019/06/19 Python
Python 类的魔法属性用法实例分析
2019/11/21 Python
Tensorflow不支持AVX2指令集的解决方法
2020/02/03 Python
社团成立邀请函
2014/01/08 职场文书
先进党支部事迹材料
2014/01/13 职场文书
如何写自我评价?自我评价写什么好?
2014/03/14 职场文书
体操比赛口号
2014/06/10 职场文书
2015年全国科普日活动总结
2015/03/23 职场文书
2016自主招生教师推荐信范文
2015/03/23 职场文书
刑事上诉状(无罪)
2015/05/23 职场文书
2016高考冲刺决心书
2015/09/23 职场文书
毕业生的自我鉴定表范文
2019/05/16 职场文书
Pytorch数据读取之Dataset和DataLoader知识总结
2021/05/23 Python