2014-07-09 43 views
3

我有一個問題,對於這個問題,我一直在尋找太久的答案。在Python中的DWORD乘法

在一個應用中,寫在PowerBuilder中,出現了這個錯誤(這還沒有被發現的時間),其中又以如下 - long * long結果long(不longlong),原因是什麼輸出在某種程度上奇怪。現在我需要在python中做同樣的事情。例如:

a = 3423729 
b = 96300 
c = a*b = 329705102700 

PowerBuilder中說:

c = a*b = -1007379092 

由於進一步的測試,現在看來似乎是一個有符號的32位整數,但我不能讓蟒蛇還給我這樣的結果。無論如何,使用calc並使他乘以dword乘法,結果是-1007379092。任何線索如何解決這個問題?

回答

3

可以使用​​包:

>>> from ctypes import c_int32 
>>> a = 3423729 
>>> b = 96300 
>>> c_int32(a*b).value 
-1007379092 
1

看來你的應用程序正在採用結果的最右邊的32位,表示爲32位int。

以類似的方式,您可以使用​​庫中的類型來表示特定大小的帶符號/無符號整數。對於有符號32位INT:

>>> import ctypes 
>>> c = 329705102700 
>>> ctypes.c_int32(c).value 
-1007379092 
1

我不知道你爲什麼要這麼做,因爲Python的分配存儲動態特地避開整數溢出。如果您確實想要複製溢出,您可以嘗試以下操作:

import ctypes 

a, b = 3423729, 96300 
c = ctypes.c_int(a * b) 
print(c.value)