python - 正整数上的位移产生负整数......怎么会发生这种情况?

时间:2014-03-23 14:15:26

标签: python python-3.x

我已经创建了一个Python 3 BitSet类,我用它来对从0开始的整数域进行快速设置操作。

我使用BitSet在基于图形的算法中遇到了一个错误。我的调试代码

print(v)
print(v == 63)
print(1 << v)

产生以下输出(注意最后一行的符号):

63
True
-9223372036854775808

当我在翻译中尝试以下内容时,我得到了我正在寻找的正面答案:

>>> 1 << 63
9223372036854775808
>>> x = 1 << 61 | 1 << 63
>>> x
11529215046068469760
>>> bin(x)
'0b1010000000000000000000000000000000000000000000000000000000000000'

一个线索是,此代码产生错误的第一个位置接近我的系统的sys.maxsize(9223372036854775807,或2 ^ 63 - 1)。

对可能导致此行为的任何想法?

到目前为止我尝试了什么

我试图在整数溢出等方面阅读所有可能的东西。我不会认为Python 3(带有它的任意长度整数)会产生这种错误。< / p>

1 个答案:

答案 0 :(得分:0)

如果二进制表示的整数的最高位为&#34; 1&#34;,那么它被认为是负数。

在这里阅读更多内容:

Two's complement