【问题标题】:bitwise negate and bitwise XOR 1 not equivalent?按位取反和按位异或 1 不等价?
【发布时间】: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


【解决方案1】:

1 不是二进制 111

对一个数的每一位求反等价于 XOR 每一位与 1,即所有位都是 1 的大小相等的数。

对于单个字节,您需要与二进制 11111111 进行异或运算,它等于十进制 255,而不是 1。十进制 1 是二进制 00000001,因此在按位异或中,您只翻转最后一位。

【讨论】:

  • 好的。如何确保我正在与 11111 进行异或运算...?也许 123 ^ (2**32)?
  • 2**32 是 100...000。通常你只需要写十六进制常量 0xFFFFFFFF ,它等于 32 位 11...11。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 2015-06-08
  • 2015-11-22
  • 1970-01-01
  • 2014-05-04
  • 1970-01-01
相关资源
最近更新 更多