我有一个python代码,它使用数字2637268776 (大于32位系统中的sys.maxint )。因此,它被另存为long类型。
我在代码中使用了C++框架绑定,因此我遇到了将其转换为int32的情况,从而导致int32溢出:
2637268776 --> -1657698520在我的例子中,它只能发生一次,所以可以放心地假设,如果整数是负的,我们就会有一个int溢出。我如何在数学上反转这些数字?
发布于 2013-03-26 20:02:10
您可以将2 * (sys.maxint + 1)添加到其中:
>>> -1657698520 + (2 * (sys.maxint + 1))
2637268776L但这只适用于原始值< 2 * (sys.maxint + 1),否则溢出将进入正数,或者更糟,再次溢出。
发布于 2013-03-26 20:02:46
简而言之,你不能。有许多长整数会映射到相同的负数。在您的示例中,它们是2637268776L、6932236072L、11227203368L、15522170664L、19817137960L等。
此外,由于这种溢出,也有可能获得正数。例如,4294967297L将映射到1。
https://stackoverflow.com/questions/15636550
复制相似问题