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 isType() 类型判断代码
Feb 14 Javascript
javaScript实现浮点数转十六进制字符
Oct 29 Javascript
20个实用的JavaScript技巧分享
Nov 28 Javascript
使用Javascript简单实现图片无缝滚动
Dec 05 Javascript
JavaScript三元运算符的多种使用技巧
Apr 16 Javascript
AngularJS中的Directive实现延迟加载
Jan 25 Javascript
Jquery ajax请求导出Excel表格的实现代码
Jun 08 Javascript
AngularJs 国际化(I18n/L10n)详解
Sep 01 Javascript
浅谈js script标签中的预解析
Dec 30 Javascript
浅谈Node.js CVE-2017-14849 漏洞分析(详细步骤)
Nov 10 Javascript
利用原生的JavaScript实现简单拼图游戏
Nov 18 Javascript
JS快速实现简单计算器
Apr 08 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
一键删除顽固的空文件夹 软件下载
2007/01/26 PHP
php快速url重写更新版[需php 5.30以上]
2010/04/25 PHP
深入理解PHP内核(一)
2015/11/10 PHP
浅析PHP7新功能及语法变化总结
2016/06/17 PHP
thinkphp jquery实现图片上传和预览效果
2020/07/22 PHP
php数据序列化测试实例详解
2017/08/12 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
2020最新版 PhpStudy V8.1版本下载安装使用详解
2020/10/30 PHP
动感效果的TAB选项卡jquery 插件
2011/07/09 Javascript
Jquery 模拟用户点击超链接或者按钮的方法
2013/10/25 Javascript
JavaScript 控制字体大小设置的方法
2016/11/23 Javascript
详解vue-router基本使用
2017/04/18 Javascript
浅谈pc端rem字体设置的问题
2017/08/03 Javascript
使用jQuery实现页面定时弹出广告效果
2017/08/24 jQuery
angularJs 表格添加删除修改查询方法
2018/02/27 Javascript
在vue中使用Autoprefixed的方法
2018/07/27 Javascript
jquery插件开发模式实例详解
2019/07/20 jQuery
vue的keep-alive用法技巧
2019/08/15 Javascript
layui表格内放置图片,并点击放大的实例
2019/09/10 Javascript
浅谈laytpl 模板空值显示null的解决方法及简单的js表达式
2019/09/19 Javascript
vue 解决路由只变化参数页面组件不更新问题
2019/11/05 Javascript
vue+elementUI动态增加表单项并添加验证的代码详解
2020/12/17 Vue.js
50行代码实现贪吃蛇(具体思路及代码)
2013/04/27 Python
Python 检查数组元素是否存在类似PHP isset()方法
2014/10/14 Python
Python字符串特性及常用字符串方法的简单笔记
2016/01/04 Python
pandas数据分组和聚合操作方法
2018/04/11 Python
Python判断字符串是否xx开始或结尾的示例
2019/08/08 Python
pytorch .detach() .detach_() 和 .data用于切断反向传播的实现
2019/12/27 Python
PyTorch的SoftMax交叉熵损失和梯度用法
2020/01/15 Python
集团公司总经理岗位职责
2013/12/20 职场文书
运动会口号8字
2014/06/07 职场文书
搞笑的获奖感言
2014/08/16 职场文书
医院党建工作总结2015
2015/05/26 职场文书
贷款收入证明格式
2015/06/24 职场文书
优秀志愿者感言
2015/08/01 职场文书
vue中三级导航的菜单权限控制
2021/03/31 Vue.js