python 2.7 中 & 和 ^ 的奇怪行为

strange behavior of & and ^ in python 2.7

这是我的代码,想知道为什么两种情况下的结果不同?实际上我希望第一行输出-1,因为位 AND 0xffffffff 不会改变任何东西。我期望第二行输出 1,因为位 XOR 0xffffffff 表示位 NOT(在 Python 中是 ~,并且添加另一个 1 应该得到 -1 的二进制补码值,即 1)

print -1 & 0xffffffff # output 4294967295
print -1 ^ 0xffffffff + 1 # output -4294967297

Python 实现任意精度的整数。在执行按位运算时,正数被视为具有无限高阶 0 位序列,而负数则被视为具有无限高阶 1 位序列。特别是,数字 -1 就像 1 的无限序列。

所以对于第一个计算我们有

    ...11111111111111111111111111111111111111111111111111111111
  & ...00000000000000000000000011111111111111111111111111111111
  = ...00000000000000000000000011111111111111111111111111111111

因为高位有0,所以是正结果。

第二次计算是:

    ...11111111111111111111111111111111111111111111111111111111
  ^ ...00000000000000000000000100000000000000000000000000000000 (this is 0xffffffff + 1 = 0x100000000)
  = ...11111111111111111111111011111111111111111111111111111111

因为高位有1,所以是负数。