正整数产生负整数的python位偏移。。。怎么会这样?

2024-06-16 09:28:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个python3bitset类,用于从0开始的整数域上的快速集操作。在

我在使用位集的基于图的算法中遇到了一个bug。我的调试代码

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

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

^{pr2}$

当我在口译员中尝试以下操作时,我会得到我想要的肯定答案:

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

一个线索是,这个代码产生bug的第一个地方是系统最大大小对于我的系统(9223372036854775807,或2^63-1)。在

有什么想法可以导致这种行为吗?在

我目前所做的努力

我试着读过关于整数溢出的所有可能的东西,我不会想到Python3(它有任意长度的整数)会产生这种错误。在


Tags: 答案代码算法bin系统地方符号整数