我有一个使用该数字的 python 代码2637268776
(大于sys.maxint
32 位系统)。因此它被保存为一个long
类型。
我在我的代码中使用了 C++ 框架绑定,所以我有一个案例,它被转换为int32
,导致 int32 溢出:
2637268776 --> -1657698520
在我的例子中,它只能发生一次,所以可以安全地假设如果整数为负,我们有一个单一的 int 溢出。如何在数学上反转数字?
我有一个使用该数字的 python 代码2637268776
(大于sys.maxint
32 位系统)。因此它被保存为一个long
类型。
我在我的代码中使用了 C++ 框架绑定,所以我有一个案例,它被转换为int32
,导致 int32 溢出:
2637268776 --> -1657698520
在我的例子中,它只能发生一次,所以可以安全地假设如果整数为负,我们有一个单一的 int 溢出。如何在数学上反转数字?
简而言之,你不能。有许多长整数会映射到同一个负数。在您的示例中,这些是 2637268776L、6932236072L、11227203368L、15522170664L、19817137960L 等。
此外,由于这种溢出,可能会得到一个正数。例如,4294967297L 将映射到 1。
你可以添加2 * (sys.maxint + 1)
到它:
>>> -1657698520 + (2 * (sys.maxint + 1))
2637268776L
但这仅适用于原始值 < 2 * (sys.maxint + 1)
,因为超出此范围,溢出将变为正数,或者更糟糕的是,再次溢出。