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 数组运用实现代码
Apr 13 Javascript
javascript使用eval或者new Function进行语法检查
Oct 16 Javascript
深入理解javascript学习笔记(一) 编写高质量代码
Aug 09 Javascript
JS将光标聚焦在文本最后的实现代码
Mar 28 Javascript
javascript实现验证身份证号的有效性并提示
Apr 30 Javascript
js实现鼠标划过给div加透明度的方法
May 25 Javascript
js判断文本框输入的内容是否为数字
Dec 23 Javascript
JavaScript实现仿淘宝商品购买数量的增减效果
Jan 22 Javascript
基于JS代码实现实时显示系统时间
Jun 16 Javascript
JavaScript日期选择功能示例
Jan 16 Javascript
js对象数组和对象的使用实例详解
Aug 27 Javascript
javascript实现左右缓动动画函数
Nov 25 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
将兴奋、喜悦和坎加斯带到戴安娜:亚马逊公主
2020/03/03 欧美动漫
PHP添加MySQL数据记录代码
2008/06/07 PHP
PHP文件上传原理简单分析
2011/05/29 PHP
PHP文件缓存内容保存格式实例分析
2014/08/20 PHP
Linux中为php配置伪静态
2014/12/17 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
2016/10/28 PHP
PHP yii实现model添加默认值的方法(两种方法)
2016/11/10 PHP
实例讲解PHP页面静态化
2018/02/05 PHP
在laravel框架中使用model层的方法
2019/10/08 PHP
如何在PHP中读写文件
2020/09/07 PHP
百度 popup.js 完美修正版非常的不错 脚本之家推荐
2009/04/17 Javascript
WEB高性能开发之疯狂的HTML压缩
2010/06/19 Javascript
JS鼠标滑过图片时切换图片实现思路
2013/09/12 Javascript
用javascript为页面添加天气显示实现思路及代码
2013/12/02 Javascript
Jquery Ajax方法传值到action的方法
2014/05/11 Javascript
web 前端常用组件之Layer弹出层组件
2016/09/22 Javascript
js倒计时小实例(多次定时)
2016/12/08 Javascript
BootStrap fileinput.js文件上传组件实例代码
2017/02/20 Javascript
angularjs $http实现form表单提交示例
2017/06/09 Javascript
如何在js代码中消灭for循环实例详解
2018/07/29 Javascript
JS跨域请求的问题解析
2018/12/03 Javascript
js实现漂亮的星空背景
2019/11/01 Javascript
ES6中Promise的使用方法实例总结
2020/02/18 Javascript
浅谈JavaScript中的“!!”作用
2020/08/03 Javascript
python 实现网上商城,转账,存取款等功能的信用卡系统
2016/07/15 Python
python 连接各类主流数据库的实例代码
2018/01/30 Python
mac 安装python网络请求包requests方法
2018/06/13 Python
详解重置Django migration的常见方式
2019/02/15 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
2019/08/06 Python
pytorch::Dataloader中的迭代器和生成器应用详解
2020/01/03 Python
pytorch 准备、训练和测试自己的图片数据的方法
2020/01/10 Python
matplotlib更改窗口图标的方法示例
2021/02/03 Python
手工制作的意大利太阳镜和光学元件:Illesteva
2019/01/19 全球购物
银行开业庆典方案
2014/02/06 职场文书
工作失职自我检讨书
2015/05/05 职场文书
python如何获取网络数据
2021/04/11 Python