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 相关文章推荐
Javascript 判断函数类型完美解决方案
Sep 02 Javascript
div移动 输入框不能输入的问题
Nov 19 Javascript
从URL中提取参数与将对象转换为URL查询参数的实现代码
Jan 12 Javascript
js监听滚动条滚动事件使得某个标签内容始终位于同一位置
Jan 24 Javascript
Select标签下拉列表二级联动级联实例代码
Feb 07 Javascript
jQuery实现的图文高亮滚动切换特效实例
Aug 10 Javascript
jQuery地图map悬停显示省市代码分享
Aug 20 Javascript
Ionic快速安装教程
Jun 03 Javascript
jQuery实现复制到粘贴板功能
Feb 11 Javascript
vue axios用法教程详解
Jul 23 Javascript
原生js调用json方法总结
Feb 22 Javascript
微信小程序分享功能onShareAppMessage(options)用法分析
Apr 24 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
改德生G88 - 加装等响度低音提升电路
2021/03/02 无线电
PHP 编写的 25个游戏脚本
2009/05/11 PHP
支持中文的php加密解密类代码
2011/11/27 PHP
PHP实现的带超时功能get_headers函数
2015/02/10 PHP
php实现的数字验证码及数字运算验证码
2015/07/30 PHP
Symfony查询方法实例小结
2017/06/28 PHP
JQuery jsonp 使用示例代码
2009/08/12 Javascript
js获取IFRAME当前的URL的方法
2013/11/13 Javascript
html的DOM中Event对象onabort事件用法实例
2015/01/21 Javascript
使用JavaScript刷新网页的方法
2015/06/04 Javascript
jQuery使用drag效果实现自由拖拽div
2015/06/11 Javascript
JavaScript数组各种常见用法实例分析
2015/08/04 Javascript
jquery ajax 如何向jsp提交表单数据
2015/08/23 Javascript
js编写当天简单日历效果【实现代码】
2016/05/03 Javascript
关于原生js中bind函数的简单实现
2016/08/10 Javascript
Javascript基础回顾之(三) js面向对象
2017/01/31 Javascript
canvas 实现中国象棋
2017/02/17 Javascript
element ui table 增加筛选的方法示例
2018/11/02 Javascript
[46:02]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第二局
2016/02/28 DOTA
Python下的Mysql模块MySQLdb安装详解
2014/04/09 Python
pycharm 使用心得(八)如何调用另一文件中的函数
2014/06/06 Python
详解Python中__str__和__repr__方法的区别
2015/04/17 Python
基于Python实现一个简单的银行转账操作
2016/03/06 Python
Python求算数平方根和约数的方法汇总
2016/03/09 Python
Python实现破解猜数游戏算法示例
2017/09/25 Python
Python合并多个Excel数据的方法
2018/07/16 Python
Python基于Dlib的人脸识别系统的实现
2020/02/26 Python
pycharm中如何自定义设置通过“ctrl+滚轮”进行放大和缩小实现方法
2020/09/16 Python
python中_del_还原数据的方法
2020/12/09 Python
水果花束:Fruit Bouquets
2017/12/20 全球购物
学校出纳员岗位职责
2014/03/18 职场文书
酒店保洁员岗位职责
2015/02/26 职场文书
惹女朋友生气检讨书
2015/05/06 职场文书
运动会通讯稿50字
2015/07/20 职场文书
2015教师节通讯稿
2015/07/20 职场文书
高考百日冲刺决心书
2015/09/23 职场文书