我有个问题,我已经找了很久了。
在一个用PowerBuilder编写的应用程序中,有一个bug (没有及时发现)如下所示-- long * long在long (而不是longlong中)中的结果,原因是输出的内容有些奇怪。现在,我需要在python中做同样的事情。例如:
a = 3423729
b = 96300
c = a*b = 329705102700PowerBuilder说:
c = a*b = -1007379092由于进一步的测试,它似乎是一个带符号的32位整数,但我无法让python返回这样的结果。无论如何,使用calc并让他进行dword乘法,结果是-1007379092。知道怎么解决这件事吗?
发布于 2014-07-09 11:24:32
您可以使用ctypes包:
>>> from ctypes import c_int32
>>> a = 3423729
>>> b = 96300
>>> c_int32(a*b).value
-1007379092发布于 2014-07-09 11:23:54
您的应用程序似乎获得了结果的最右边的32位,表示为32位int。
您可以使用ctypes库中的类型以类似的方式表示具有特定大小的有符号/无符号整数。对于已签名的32位int:
>>> import ctypes
>>> c = 329705102700
>>> ctypes.c_int32(c).value
-1007379092发布于 2014-07-09 11:25:15
我不知道为什么要这样做,因为Python专门动态地分配存储以避免整数溢出。如果您确实希望复制溢出,可以尝试以下操作:
import ctypes
a, b = 3423729, 96300
c = ctypes.c_int(a * b)
print(c.value)https://stackoverflow.com/questions/24652148
复制相似问题