简介:
我们在JS的书写过程中通常都是使用十进制运算,但是也是会有一些少数的场景需要使用到二进制运算,比如在Vue3的源码中就通过使用二进制运算来实现对effect函数的深度进行记录以及比较,来优化响应式以及防止无限循环等等这是我搜集并总结的一些常用二进制运算方法
位运算符有 7 个,分为两类:
逻辑位运算符:位与(&)、位或(|)、位异或(^)、非位(~)
移位运算符:左移(<<)、右移(>>)、无符号右移(>>>)
逻辑位运算符
1.&
“&”运算符(位与)用于对两个二进制操作数逐位进行比较,比较规则如下。
第一个数字的位置 | 第二个数字的位置 | 第二个数字的位置 |
---|---|---|
1 | 1 | 1 |
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 0 |
其实就是执行我们常用的&&比较方法一样,1代表true,0代表false,
1 && 1 = true // 1
0 && 1 = false // 0
1 && 0 = false // 0
0 && 0 = false // 0
3 & 9 // 等于1
0000 0000 0000 0000 0000 0000 0000 0011 // 3
0000 0000 0000 0000 0000 0000 0000 1001 // 9
--------------------------------------------
0000 0000 0000 0000 0000 0000 0000 0001 // 1
总结起来就是全部是1结果是1其他都是0
2.|
“|”运算符(位或)用于对两个二进制操作数逐位进行比较,比较规则如下。
第一个数字的位置 | 第二个数字的位置 | 第二个数字的位置 |
---|---|---|
1 | 1 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
这与我们比较运算中的||一样,有一个true就是true,都不是true才是false
1 || 1 = true // 1
0 || 1 = true // 1
1 || 0 = true // 1
0 || 0 = false // 0
3 | 9 // 等于11
0000 0000 0000 0000 0000 0000 0000 0011 // 3
0000 0000 0000 0000 0000 0000 0000 1001 // 9
--------------------------------------------
0000 0000 0000 0000 0000 0000 0000 1011 // 11
应用:
数字类型取整数,运算更加高效,因为其生成的32位是整数存储,所以会直接舍弃小数部分的数值,我们只需和0进行比较就可以返回原来的数值的整数部分,但是其最高只有存储32位,但是我们js内最高存储位数是53位所以使用的时候需要确定数字的最大位数才行
10.2341 | 0 // 10
3.^
“^”运算符(位异或)用于对两个二进制操作数逐位进行比较,比较规则如下。
第一个数字的位置 | 第二个数字的位置 | 第二个数字的位置 |
---|---|---|
1 | 1 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
3 <