python - 正整数位移产生负整数......这怎么会发生?

标签 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(具有任意长度的整数)会产生这种错误。

最佳答案

如果一个二进制表示的整数的最高有效位为“1”,则它被认为是一个负数。

在这里阅读更多:

Two's complement

关于python - 正整数位移产生负整数......这怎么会发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22592038/

相关文章:

python数组地址传递给C

python - 有没有类似 Blender 节点编辑器的 Python 可重用组件?

python - 如何使用 numpy 有效地将函数应用于第三维数组?

python - Pandas - 将多个文本文件中的信息合并到单个数据帧中

python - 如何从 QDialog 访问 QMainWindow 中的小部件

python - AWS DynamoDB Stream python 转换原生格式

python - 如何接收 “icecast”网络广播流以使用Python立即播放?

python - 平面嵌套字典,其中新键将是所有嵌套键的元组

python - 字典内棘手的列表操作

python - gensim入门错误: No such file or directory: 'text8'