首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >蟒蛇的DWORD增殖

蟒蛇的DWORD增殖
EN

Stack Overflow用户
提问于 2014-07-09 11:12:01
回答 3查看 1.5K关注 0票数 3

我有个问题,我已经找了很久了。

在一个用PowerBuilder编写的应用程序中,有一个bug (没有及时发现)如下所示-- long * longlong (而不是longlong中)中的结果,原因是输出的内容有些奇怪。现在,我需要在python中做同样的事情。例如:

代码语言:javascript
复制
a = 3423729
b = 96300
c = a*b = 329705102700

PowerBuilder说:

代码语言:javascript
复制
c = a*b = -1007379092

由于进一步的测试,它似乎是一个带符号的32位整数,但我无法让python返回这样的结果。无论如何,使用calc并让他进行dword乘法,结果是-1007379092。知道怎么解决这件事吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-09 11:24:32

您可以使用ctypes包:

代码语言:javascript
复制
>>> from ctypes import c_int32
>>> a = 3423729
>>> b = 96300
>>> c_int32(a*b).value
-1007379092
票数 3
EN

Stack Overflow用户

发布于 2014-07-09 11:23:54

您的应用程序似乎获得了结果的最右边的32位,表示为32位int。

您可以使用ctypes库中的类型以类似的方式表示具有特定大小的有符号/无符号整数。对于已签名的32位int:

代码语言:javascript
复制
>>> import ctypes
>>> c = 329705102700
>>> ctypes.c_int32(c).value
-1007379092
票数 1
EN

Stack Overflow用户

发布于 2014-07-09 11:25:15

我不知道为什么要这样做,因为Python专门动态地分配存储以避免整数溢出。如果您确实希望复制溢出,可以尝试以下操作:

代码语言:javascript
复制
import ctypes

a, b = 3423729, 96300
c = ctypes.c_int(a * b)
print(c.value)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24652148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档