我的离散数学告诉我,否定二进制数的每一位都相当于将其与1进行异或。即:
~1010 === 0101
1010 XOR 111 = 0101
但这并不适用于javascript:
~123 === -124
123 ^ 1 === 122
为什么?
答案 0 :(得分:2)
否定一个数字的每一位等于XOR 每个位为1,即所有位都为1的大小相等。
对于单个字节,您希望xor使用二进制11111111,它等于十进制255,而不是1.十进制1是二进制00000001,因此在按位异或中,您只翻转最后一位。