如何修复int溢出?

时间:2013-03-26 11:58:46

标签: python integer-overflow

我有一个使用数字2637268776的python代码(在32位系统中大于sys.maxint)。因此,它会保存为long类型。

我在我的代码中使用了C ++框架绑定,所以我有一个案例,它被转换为int32,导致int32溢出:

2637268776 --> -1657698520

在我的情况下,它只能发生一次,因此可以安全地假设如果整数是负数,我们只有一个int溢出。我怎样才能在数学上反转数字?

2 个答案:

答案 0 :(得分:5)

总之,你不能。有许多长整数将映射到相同的负数。在您的示例中,这些是2637268776L,6932236072L,11227203368L,15522170664L,19817137960L等。

此外,由于这种溢出,可能会得到号码。例如,4294967297L将映射到1。

答案 1 :(得分:1)

您可以向其添加2 * (sys.maxint + 1)

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

但这仅适用于原始值< 2 * (sys.maxint + 1),超过溢出将会出现正数,或者更糟糕的是,再次溢出。