我有一个问题,我一直在寻找答案的答案太久了。
在一个用PowerBuilder编写的应用程序中,出现了一个错误(未按时发现),如下所示 - long * long
导致long
(不在longlong
}),由于输出有点奇怪。现在我需要在python中做同样的事情。例如:
a = 3423729
b = 96300
c = a*b = 329705102700
PowerBuilder说:
c = a*b = -1007379092
由于进一步的测试,它似乎是一个带符号的32位整数,但我无法让python返回我这样的结果。无论如何,使用calc并让他使用dword乘法,结果是-1007379092
。有任何线索如何解决这个问题?
答案 0 :(得分:3)
您可以使用ctypes
包:
>>> from ctypes import c_int32
>>> a = 3423729
>>> b = 96300
>>> c_int32(a*b).value
-1007379092
答案 1 :(得分:1)
您的应用程序似乎正在取最右边的32位结果,表示为32位int。
您可以使用ctypes
库中的类型以类似的方式表示特定大小的有符号/无符号整数。对于带符号的32位int:
>>> import ctypes
>>> c = 329705102700
>>> ctypes.c_int32(c).value
-1007379092
答案 2 :(得分:1)
我不知道你为什么要这样做,因为Python专门动态分配存储以避免整数溢出。如果您确实要复制溢出,可以尝试以下操作:
import ctypes
a, b = 3423729, 96300
c = ctypes.c_int(a * b)
print(c.value)