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实现动态增加删除表格行(兼容IE/FF)
Apr 02 Javascript
解javascript 混淆加密收藏
Jan 16 Javascript
document.all的一个比较完整的总结及案例
Jan 31 Javascript
JavaScript判断表单提交时哪个radio按钮被选中的方法
Mar 21 Javascript
javascript跨域总结之window.name实现的跨域数据传输
Nov 01 Javascript
基于node实现websocket协议
Apr 25 Javascript
详解Angular 开发环境搭建
Jun 22 Javascript
node中Express 动态设置端口的方法
Aug 04 Javascript
jquery 获取索引值在一定范围的列表方法
Jan 25 jQuery
JS实现图片切换效果
Nov 17 Javascript
微信小程序如何使用globalData的方法
Jun 06 Javascript
Layui Table js 模拟选中checkbox的例子
Sep 03 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
虹吸式咖啡壶操作
2021/03/03 冲泡冲煮
PDO版本问题 Invalid parameter number: no parameters were bound
2013/01/06 PHP
php解析url并得到url中的参数及获取url参数的四种方式
2015/10/26 PHP
php实现遍历文件夹的方法汇总
2017/03/02 PHP
laravel框架 api自定义全局异常处理方法
2019/10/11 PHP
PHP date_default_timezone_set()设置时区操作实例分析
2020/05/16 PHP
javascript 隐藏/显示指定的区域附HTML元素【legend】用法
2010/03/05 Javascript
给应用部分的js代码设定一个统一的入口
2014/06/15 Javascript
JavaScript使用pop方法移除数组最后一个元素用法实例
2015/04/06 Javascript
如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)
2016/02/23 Javascript
JavaScript Array对象详解
2016/03/01 Javascript
详解Javascript ES6中的箭头函数(Arrow Functions)
2016/08/24 Javascript
Vuejs 用$emit与$on来进行兄弟组件之间的数据传输通信
2017/02/23 Javascript
JQ中$(window).load和$(document).ready区别与执行顺序
2017/03/01 Javascript
JavaSctit 利用FileReader和滤镜上传图片预览功能
2017/09/05 Javascript
Node.js Stream ondata触发时机与顺序的探索
2019/03/08 Javascript
微信小程序 导入图标实现过程详解
2019/10/11 Javascript
Vue实现多标签选择器
2019/11/28 Javascript
vue项目中在可编辑div光标位置插入内容的实现代码
2020/01/07 Javascript
[42:20]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
Python编程实现粒子群算法(PSO)详解
2017/11/13 Python
Python之批量创建文件的实例讲解
2018/05/10 Python
python 定时器,实现每天凌晨3点执行的方法
2019/02/20 Python
python numpy实现文件存取的示例代码
2019/05/26 Python
css3 条纹化和透明化表格Firefox下测试成功
2014/04/15 HTML / CSS
CSS Grid布局教程之什么是网格布局
2014/12/30 HTML / CSS
美国钻石商店:Zales
2016/11/20 全球购物
雷蛇美国官网:Razer
2020/04/03 全球购物
女大学生毕业找工作的自我评价
2013/10/03 职场文书
职称评定自我鉴定
2014/03/18 职场文书
员工工作表现评语
2014/04/26 职场文书
授权委托书
2014/09/17 职场文书
2014年科协工作总结
2014/12/09 职场文书
大学运动会通讯稿
2015/07/18 职场文书
《称赞》教学反思
2016/02/17 职场文书
手把手教你实现PyTorch的MNIST数据集
2021/06/28 Python