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 相关文章推荐
cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失
Jun 04 Javascript
如何用js控制frame的隐藏或显示的解决办法
Mar 20 Javascript
js的alert弹出框出现乱码解决方案
Sep 02 Javascript
如何让浏览器支持jquery ajax load 前进、后退功能
Jun 12 Javascript
JavaScript中的this机制
Jan 30 Javascript
JQuery页面随滚动条动态加载效果的简单实现(推荐)
Feb 08 Javascript
微信小程序 实现点击添加移除class
Jun 12 Javascript
简单实现js上传文件功能
Aug 21 Javascript
mpvue中配置vuex并持久化到本地Storage图文教程解析
Mar 15 Javascript
vue+iview动态渲染表格详解
Mar 19 Javascript
maptalks+three.js+vue webpack实现二维地图上贴三维模型操作
Aug 10 Javascript
Javascript call及apply应用场景及实例
Aug 26 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
Windows下PHP的任意文件执行漏洞
2006/10/09 PHP
php函数的常用方法及注意之处小结
2011/07/10 PHP
php快速排序原理与实现方法分析
2016/05/26 PHP
IE与firefox之jquery用法区别
2008/10/03 Javascript
JavaScript 字符编码规则
2009/05/04 Javascript
Jquery常用技巧收集整理篇
2010/11/14 Javascript
jQuery 下拉列表 二级联动插件分享
2012/03/29 Javascript
Jquery读取URL参数小例子
2013/08/30 Javascript
jquery实现键盘左右翻页特效
2015/04/30 Javascript
javascript模拟评分控件实现方法
2015/05/13 Javascript
jquery实现从数组移除指定的值
2015/06/24 Javascript
jQuery手动点击实现图片轮播特效
2020/04/20 Javascript
HTML页面,测试JS对C函数的调用简单实例
2016/08/09 Javascript
Bootstrap 模态框实例插件案例分析
2016/12/28 Javascript
js实现添加删除表格(两种方法)
2017/04/27 Javascript
ES6/JavaScript使用技巧分享
2017/12/14 Javascript
如何理解Vue的v-model指令的使用方法
2018/07/19 Javascript
JQuery Ajax动态加载Table数据的实例讲解
2018/08/09 jQuery
原生js实现可兼容PC和移动端的拖动滑块功能详解【测试可用】
2019/08/15 Javascript
vue实现商城秒杀倒计时功能
2019/12/12 Javascript
[51:17]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
初探利用Python进行图文识别(OCR)
2019/02/26 Python
Python3列表内置方法大全及示例代码小结
2019/05/10 Python
详解如何从TensorFlow的mnist数据集导出手写体数字图片
2019/08/05 Python
python脚本之一键移动自定格式文件方法实例
2019/09/02 Python
matplotlib 三维图表绘制方法简介
2020/09/20 Python
python实现学生信息管理系统源码
2021/02/22 Python
Html5导航栏吸顶方案原理与对比实现
2020/06/10 HTML / CSS
全球销量第一生发产品:Viviscal
2017/12/21 全球购物
Harrods美国:英国最大的百货公司
2018/11/04 全球购物
欧洲最古老的鞋厂:Peter Kaiser
2019/11/05 全球购物
TCP/IP的分层模型
2013/10/27 面试题
电大物流学生的自我评价
2013/10/25 职场文书
网络宣传方案
2014/03/15 职场文书
公司授权委托书格式范文
2014/10/02 职场文书
学生保证书格式
2015/02/27 职场文书