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 live函数
Dec 24 Javascript
实现51Map地图接口(示例代码)
Nov 22 Javascript
JavaScript执行顺序详细介绍
Dec 04 Javascript
Javascript中3个需要注意的运算符
Apr 02 Javascript
原生JavaScript实现瀑布流布局
Jun 28 Javascript
实例解析jQuery中proxy()函数的用法
May 24 Javascript
微信小程序 页面跳转传值实现代码
Jul 27 Javascript
微信小程序中换行空格(多个空格)写法详解
Jul 10 Javascript
JS实现的RC4加密算法示例
Aug 16 Javascript
vue使用keep-alive保持滚动条位置的实现方法
Apr 09 Javascript
详解vue中移动端自适应方案
May 05 Javascript
微信小程序移动拖拽视图-movable-view实例详解
Aug 17 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
ZF等常用php框架中存在的问题
2008/01/10 PHP
PHP排序算法之堆排序(Heap Sort)实例详解
2018/04/21 PHP
splice slice区别
2006/10/09 Javascript
javascript中对对层的控制
2006/12/29 Javascript
IE和Mozilla的兼容性汇总event
2007/08/12 Javascript
document.documentElement &amp;&amp; document.documentElement.scrollTop
2007/12/01 Javascript
Js 弹出框口并返回值的两种常用方法
2010/12/30 Javascript
JavaScript实现的图像模糊算法代码分享
2014/04/22 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
触屏中的JavaScript事件分析
2015/02/06 Javascript
javascript图片预加载实例分析
2015/07/16 Javascript
AngularJS 让人爱不释手的八种功能
2016/03/23 Javascript
简单谈谈gulp-changed插件
2017/02/21 Javascript
canvas压缩图片转换成base64格式输出文件流
2017/03/09 Javascript
jquery实现图片上传前本地预览
2017/04/28 jQuery
详解js 创建对象的几种方法
2019/03/08 Javascript
微信小程序之下拉列表实现方法解析(附完整源码)
2019/08/23 Javascript
angular异步验证防抖踩坑实录
2019/12/01 Javascript
python文件和目录操作函数小结
2014/07/11 Python
Python中将字典转换为列表的方法
2016/09/21 Python
Python使用当前时间、随机数产生一个唯一数字的方法
2017/09/18 Python
简单介绍python封装的基本知识
2019/08/10 Python
pytorch使用指定GPU训练的实例
2019/08/19 Python
matplotlib 对坐标的控制,加图例注释的操作
2020/04/17 Python
python实现飞船游戏的纵向移动
2020/04/24 Python
HTML5新特性之type=file文件上传功能
2018/02/02 HTML / CSS
法国家具及室内配件店:home24
2017/01/21 全球购物
SEPHORA丝芙兰捷克官网:购买香水、化妆品和护肤品
2018/11/26 全球购物
傲盾软件面试题
2015/08/17 面试题
公司年会抽奖活动主持词
2014/03/31 职场文书
企业授权委托书范本
2014/04/02 职场文书
保护地球的标语
2014/06/17 职场文书
教师作风整顿个人剖析材料
2014/10/10 职场文书
数学教师个人工作总结
2015/02/06 职场文书
幼儿园大班教学反思
2016/03/02 职场文书
python中sqllite插入numpy数组到数据库的实现方法
2021/06/21 Python