【发布时间】:2017-06-06 16:18:34
【问题描述】:
我的离散数学告诉我,对二进制数的每一位求反等于与 1 异或。即:
~1010 === 0101
1010 XOR 111 = 0101
但这在 javascript 中不成立:
~123 === -124
123 ^ 1 === 122
为什么?
【问题讨论】:
-
十进制的 1 与二进制的 111 不同。
-
对任意宽度的泛化是与 -1 进行异或(也适用于单个位的情况)
-
@harold 你能解释一下为什么会这样吗?
-
@Boyang 因为任何长度的“所有位设置”都是该长度的-1。证明:将 1 加到所有位上,结果为零。 “所有位设置”+ 1 = 0,所以“所有位设置”= -1。
-
@harold 好的。如果你愿意,你可以添加一个答案,我会接受
标签: javascript bit-manipulation bitwise-operators xor negate