2013-03-26 81 views
0

我使用的编号为2637268776(在32位系统中大于sys.maxint)的python代码。因此它被保存为long类型。如何解决int溢出?

我用我的代码是C++框架绑定,所以我必须在那里它被转换成int32的情况下,产生一个Int32溢出:

2637268776 --> -1657698520 

在我的情况下,它可以发生只有一个时间,所以假设如果整数是负数,我们有一个int溢出是安全的。我如何在数学上反转数字?

+1

“数学逆转”是什么意思? – 2013-03-26 12:00:29

+0

难道你不能只使用一个无符号的32位整数? – Aufziehvogel 2013-03-26 12:03:09

+0

您显示的号码仍然可以存储为无符号的32位整数。现在取决于这是否适用于您正在使用的所有数字,或者您需要比unsigned int更多的容量。我想这很难保证,所以你应该尝试在代码的C++端使用long int,否则你会遇到NPE在他的答案中显示的含糊之处。 – Piotr99 2013-03-26 12:09:52

回答

1

你可以添加2 * (sys.maxint + 1)它:

>>> -1657698520 + (2 * (sys.maxint + 1)) 
2637268776L 

但只适用于原始值< 2 * (sys.maxint + 1),如超出溢出会碰上正数,或者更糟,溢出一次。

5

总之,你不能。有很多长整数会映射到相同的负数。在你的榜样,这些都是2637268776L,6932236072L,11227203368L,15522170664L,19817137960L等

而且,有可能获得积极号码作为这种溢出的结果。例如,4294967297L将映射到1.