0

我有一个使用该数字的 python 代码2637268776(大于sys.maxint32 位系统)。因此它被保存为一个long类型。

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

2637268776 --> -1657698520

在我的例子中,它只能发生一次,所以可以安全地假设如果整数为负,我们有一个单一的 int 溢出。如何在数学上反转数字?

4

2 回答 2

5

简而言之,你不能。有许多长整数会映射到同一个负数。在您的示例中,这些是 2637268776L、6932236072L、11227203368L、15522170664L、19817137960L 等。

此外,由于这种溢出,可能会得到一个正数。例如,4294967297L 将映射到 1。

于 2013-03-26T12:02:46.440 回答
1

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

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

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

于 2013-03-26T12:02:09.980 回答