我有一个使用数字2637268776
的python代码(在32位系统中大于sys.maxint
)。因此,它会保存为long
类型。
我在我的代码中使用了C ++框架绑定,所以我有一个案例,它被转换为int32
,导致int32溢出:
2637268776 --> -1657698520
在我的情况下,它只能发生一次,因此可以安全地假设如果整数是负数,我们只有一个int溢出。我怎样才能在数学上反转数字?
答案 0 :(得分:5)
此外,由于这种溢出,可能会得到正号码。例如,4294967297L将映射到1。
答案 1 :(得分:1)
您可以向其添加2 * (sys.maxint + 1)
:
>>> -1657698520 + (2 * (sys.maxint + 1))
2637268776L
但这仅适用于原始值< 2 * (sys.maxint + 1)
,超过溢出将会出现正数,或者更糟糕的是,再次溢出。