描述
js中逻辑位运算包括&、|、~、^这四种,逻辑位运算是针对二进制数据的运算
解析
补码运算
在计算机中所有的计算都是通过补码来计算的,补码是为了解决负数参与的运算,正数的原码、反码、补码都等于正数本生,且符号位为0,负数的原码可视该数为正数计算出原码,然后符号位替换成1表示负数,负数的反码是除符号位外按位取反,补码是反码+1,符号位参与运算,比如:
+0:0000 0000
-0:1000 0000
// 除符号位外按位取反
-0(反):1111 1111
// 符号为参与运算
-0(补):0000 0000(高位溢出舍去,刚好和+0的补码相等)
补码的通用计算公式
假设: A + B = C
则: A(补) + B(补) = C(补)
比如计算2-4:
2(补):0000 0010
-4(补):1111 1100
// 符号为参与运算
2-4(补):1111 1110
2-4(原):1000 0010
所以 2 - 4 = -2
解析
位运算是指定补码间运算过程中如何去计算结果
&(与)
补码运算逻辑
1 | 0 | |
---|---|---|
1 | 1 | 0 |
0 | 0 | 0 |
比如:
2 & -2
2(补):0000 0010
-2(补):1111 1110
2 & -2(补):0000 0010
2 & -2(原):0000 0010 === 2
|(或)
1 | 0 | |
---|---|---|
1 | 1 | 1 |
0 | 1 | 0 |
比如:
2 | -2
2(补):0000 0010
-2(补):1111 1110
2 | -2(补):1111 1110
2 | -2(原):1000 0010 === -2
~(非)
要注意的是非运算是只针对单个二进制数据
比如
~-2
-2(补):1111 1110
~-2(补):0000 0001
~-2(原):0000 0001 === 1
^(异或)
1 | 0 | |
---|---|---|
1 | 0 | 1 |
0 | 1 | 0 |
比如:
2 ^ -2
2(补):0000 0010
-2(补):1111 1110
2 ^ -2(补):1111 1100
2 ^ -2(原):1000 0100 === -4
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。