【发布时间】:2017-08-14 21:49:12
【问题描述】:
这是我的代码,想知道为什么两种情况下的结果不同?实际上我希望第一行输出-1,因为位 AND 0xffffffff 不会改变任何东西。我希望第二行输出 1,因为位 XOR 0xffffffff 表示位 NOT(在 Python 中是 ~,并且添加另一个 1 应该得到 -1 的二进制补码值,即 1)
print -1 & 0xffffffff # output 4294967295
print -1 ^ 0xffffffff + 1 # output -4294967297
【问题讨论】:
-
Python 整数运算不是 32 位的;它是无限位的。 (它在物理上不会存储无限数量的位,但它的行为就像它一样。)
-
@user2357112,我知道它像 Java 大整数一样是无限的,但是在我的第一种情况下它的值是 4294967295,在我的第二种情况下是 -4294967297?
-
您的推理是假设 32 位。为什么您认为“位 AND 0xffffffff 不会改变任何东西”?为什么你认为“bit XOR 0xffffffff 表示 bit NOT”?
-
(如果你在 Java 中测试并得到 -1 和 1,你很可能搞砸了
^和+的优先级以及 0xffffffff BigInteger 的初始化。具有正确的优先级并避免在 0xffffffff 上溢出,Java gives the same output.)
标签: python python-2.7 twos-complement