描述

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


broken
3 声望0 粉丝

to be creator