按位否定和按位XOR 1不相等?

时间:2017-01-21 21:17:01

标签: javascript bit-manipulation bitwise-operators xor negate

我的离散数学告诉我,否定二进制数的每一位都相当于将其与1进行异或。即:

~1010 === 0101
1010 XOR 111 = 0101

但这并不适用于javascript:

~123 === -124
123 ^ 1 === 122

为什么?

1 个答案:

答案 0 :(得分:2)

1不是二进制111

否定一个数字的每一位等于XOR 每个位为1,即所有位都为1的大小相等。

对于单个字节,您希望xor使用二进制11111111,它等于十进制255,而不是1.十进制1是二进制00000001,因此在按位异或中,您只翻转最后一位。