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
以下是 运行 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