2024-04-26 15:00:49 发布
网友
>>> result = 0 >>> x = -2 >>> >>> for i in range(32): ... c = 1 << i ... if c & x: result |= c ... >>> print(result) 4294967294
如您所见,预期的结果应该是-2,但是程序打印4294967294,这是两个负数的补码表示。在
-2
4294967294
如何修复?python中是否有signed integer?在
signed integer
非常感谢!在
Python(甚至python2)不强制使用整数子类型。您可以循环到48(而不是32),Python会自动将数字转换为long,您将得到281474976710654L。如果您在python2.x上打印repr(result),则会更加明确,因为您将得到4294967294L来显示转换为long
281474976710654L
repr(result)
4294967294L
您知道您想要的是一个有符号的32位整数,但Python不知道。您所能做的就是显式转换:
if result > 0x7fffffff: result = int(result - 0x100000000)
(在python2.x下,int转换强制从long转换为int)
int
我只看到三种可能性
结果变量的长度超过32位
结果是无符号变量而不是有符号变量
结果变量为任意大小(big int)
sx=x; if (x<0) x=-x;
if (sx<0) result=-result;
Python(甚至python2)不强制使用整数子类型。您可以循环到48(而不是32),Python会自动将数字转换为long,您将得到
281474976710654L
。如果您在python2.x上打印repr(result)
,则会更加明确,因为您将得到4294967294L
来显示转换为long您知道您想要的是一个有符号的32位整数,但Python不知道。您所能做的就是显式转换:
(在python2.x下,
int
转换强制从long转换为int)我只看到三种可能性
结果变量的长度超过32位
结果是无符号变量而不是有符号变量
结果变量为任意大小(big int)
sx=x; if (x<0) x=-x;
。。。在循环之前if (sx<0) result=-result;
。。。循环后相关问题 更多 >
编程相关推荐