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 DIV弹出效果实现代码
Jul 03 Javascript
IE FF OPERA都可用的弹出层实现代码
Sep 29 Javascript
关于js中alert弹出窗口文本换行问题简单详细说明
Dec 11 Javascript
基于jQuery Ajax实现上传文件
Mar 24 Javascript
JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
May 16 Javascript
微信小程序 转发功能的实现
Aug 04 Javascript
element-ui 表格实现单元格可编辑的示例
Feb 26 Javascript
layui 给数据表格加序号的方法
Aug 20 Javascript
基于elementUI使用v-model实现经纬度输入的vue组件
May 12 Javascript
基于Vue+ElementUI的省市区地址选择通用组件
Nov 20 Javascript
ES6中new Function()语法及应用实例分析
Feb 19 Javascript
如何手动实现一个 JavaScript 模块执行器
Oct 16 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
php $_SERVER[&quot;REQUEST_URI&quot;]获取值的通用解决方法
2010/06/21 PHP
数据库中排序的对比及使用条件详解
2012/02/23 PHP
PHP实现抓取迅雷VIP账号的方法
2015/07/30 PHP
YII Framework框架教程之国际化实现方法
2016/03/14 PHP
PHP通过CURL实现定时任务的图片抓取功能示例
2016/10/03 PHP
ThinkPHP5.0框架使用build 自动生成模块操作示例
2019/04/11 PHP
PHP实现的文件浏览器功能简单示例
2019/09/12 PHP
在Linux上用forever实现Node.js项目自启动
2014/07/09 Javascript
详解JavaScript对W3C DOM模版的支持情况
2015/06/16 Javascript
Jquery代码实现图片轮播效果(一)
2015/08/12 Javascript
js带缩略图的图片轮播效果代码分享
2015/09/14 Javascript
AngularJS实用开发技巧(推荐)
2016/07/13 Javascript
微信小程序 radio单选框组件详解及实例代码
2017/01/10 Javascript
JavaScript实现换肤功能
2017/09/15 Javascript
浅析node应用的timing-attack安全漏洞
2018/02/28 Javascript
让webpack+vue-cil项目不再自动打开浏览器的方法
2018/09/27 Javascript
vue实现压缩图片预览并上传功能(promise封装)
2019/01/10 Javascript
vant-ui组件调用Dialog弹窗异步关闭操作
2020/11/04 Javascript
微信小程序实现滚动Tab选项卡
2020/11/16 Javascript
微信小程序实现分页加载效果
2020/11/19 Javascript
Python访问MySQL封装的常用类实例
2014/11/11 Python
python base64 decode incorrect padding错误解决方法
2015/01/08 Python
Python跨文件全局变量的实现方法示例
2017/12/10 Python
python 3.6.4 安装配置方法图文教程
2018/09/18 Python
Python+threading模块对单个接口进行并发测试
2019/06/25 Python
Python中断多重循环的思路总结
2019/10/04 Python
Python 类,property属性(简化属性的操作),@property,property()用法示例
2019/10/12 Python
浅析python 通⽤爬⾍和聚焦爬⾍
2020/09/28 Python
python dir函数快速掌握用法技巧
2020/12/09 Python
法拉利英国精品店:Ferraris Boutique UK
2019/07/20 全球购物
迷你西餐厅创业计划书范文
2013/12/31 职场文书
农村产权制度改革实施方案
2014/03/21 职场文书
电大毕业生自我鉴定
2014/04/10 职场文书
作文评语大全
2014/04/23 职场文书
电力安全事故反思
2014/04/27 职场文书
小班评语大全
2014/05/04 职场文书