Python 中的奇怪位操作

Weird bit manipulation in Python

以下是 运行 Python 2.7.2 解释器上的 bin 内置函数的结果:

   bin(5)
=> '0b101'
   bin(-5)
=> '-0b101'
   bin(5&-5)
=> '0b1'

无限位和 2 的补码:

+5 = 0000...0101 -5 = 1111...1101

那为什么是5&-5 = 0000...1

不应该是0000...101吗?对此有何解释?

你补错了。它实际上是:1111...1011

所以...1011 & ...0101 = 1.

其实-5的2的补码是111.....1011 现在,如果你有点聪明并且这两个

  000...0101
& 111...1011
  ----------
  000...0001