gpt4 book ai didi

python - 产生无符号大数而不是负数的位运算

转载 作者:太空宇宙 更新时间:2023-11-04 01:09:08 26 4
gpt4 key购买 nike

>>> result = 0
>>> x = -2
>>>
>>> for i in range(32):
... c = 1 << i
... if c & x: result |= c
...
>>> print(result)
4294967294

如您所见,预期结果应为 -2,但程序打印出 4294967294,这是负数的二进制补码表示。

如何解决? python 中是否有有符号整数

非常感谢!

最佳答案

Python(甚至 Python 2)不强制执行整数子类型。您最多可以循环 48 个(而不是 32 个),Python 会自动将数字转换为长整数,您将得到 281474976710654L。如果你在 Python 2.x 上打印 repr(result) 会更明确,因为你会得到 4294967294L 显示转换为 long

知道您想要的是一个带符号的 32 位整数,但 Python 不知道。您所能做的就是显式转换:

if result > 0x7fffffff: result = int(result - 0x100000000)

(int 转换强制从 Python 2.x 下的 long 转换为 int)

关于python - 产生无符号大数而不是负数的位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28759391/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com