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 window.opener的用法分析
Apr 07 Javascript
JavaScript中的私有/静态属性介绍
Jul 26 Javascript
JavaScript中实现最高效的数组乱序方法
Oct 11 Javascript
分享28款免费实用的 JQuery 图片和内容滑块插件
Dec 15 Javascript
jQuery中animate动画第二次点击事件没反应
May 07 Javascript
javascript删除元素节点removeChild()用法实例
May 26 Javascript
jquery获得当前html页面源码的方法
Jul 14 Javascript
js滚动条平滑移动示例代码
Mar 29 Javascript
JavaScript实现相册弹窗功能(zepto.js)
Jun 21 Javascript
基于JavaScript实现单选框下拉菜单添加文件效果
Jun 26 Javascript
js表单元素checked、radio被选中的几种方法(详解)
Aug 22 Javascript
JavaScript this关键字指向常用情况解析
Sep 02 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创建sprite
2014/02/11 PHP
PHP实现AES256加密算法实例
2014/09/22 PHP
php实现根据词频生成tag云的方法
2015/04/17 PHP
js prototype截取字符串函数
2010/04/01 Javascript
jQuery控制图片的hover效果(smartRollover.js)
2012/03/18 Javascript
js操作输入框中选择内容兼容IE及其他主流浏览器
2014/04/22 Javascript
JS实现的简单鼠标跟随DiV层效果完整实例
2015/10/31 Javascript
js事件驱动机制 浏览器兼容处理方法
2016/07/23 Javascript
微信小程序图片选择、上传到服务器、预览(PHP)实现实例
2017/05/11 Javascript
用js将long型数据转换成date型或datetime型的实例
2017/07/03 Javascript
three.js 入门案例详解
2018/01/23 Javascript
详解Vue2 添加对scss的支持
2019/01/02 Javascript
解决微信小程序调用moveToLocation失效问题【超简单】
2019/04/12 Javascript
vue Tab切换以及缓存页面处理的几种方式
2019/11/05 Javascript
在vue中实现某一些路由页面隐藏导航栏的功能操作
2020/09/21 Javascript
Python编码时应该注意的几个情况
2013/03/04 Python
python里对list中的整数求平均并排序
2014/09/12 Python
python实现挑选出来100以内的质数
2015/03/24 Python
在ironpython中利用装饰器执行SQL操作的例子
2015/05/02 Python
Unicode和Python的中文处理
2017/03/19 Python
Python Web程序部署到Ubuntu服务器上的方法
2018/02/22 Python
python递归函数绘制分形树的方法
2018/06/22 Python
python面试题小结附答案实例代码
2019/04/11 Python
浅谈pandas.cut与pandas.qcut的使用方法及区别
2020/03/03 Python
python opencv把一张图片嵌入(叠加)到另一张图片上的实现代码
2020/06/11 Python
如何在Win10系统使用Python3连接Hive
2020/10/15 Python
html5 CSS过度-webkit-transition使用介绍
2013/07/02 HTML / CSS
现代化办公人员工作的自我评价
2013/10/16 职场文书
学生实习推荐信范文
2013/11/26 职场文书
酒店办公室文员岗位职责
2013/12/18 职场文书
绿化工程实施方案
2014/03/17 职场文书
党风廉政建设责任书
2014/04/14 职场文书
《清澈的湖水》教学反思
2016/02/17 职场文书
《倍数和因数》教学反思
2016/02/23 职场文书
Linux安装apache服务器的配置过程
2021/11/27 Servers
Java 垃圾回收超详细讲解记忆集和卡表
2022/04/08 Java/Android