我试图将一个函数从C移植到python,为了便于调试,我希望它执行相同的CPU字大小限制操作,这样我可以比较中间结果。换句话说,我想要:

a = UnsignedBoundedInt(32, 399999)
b = UnsignedBoundedInt(32, 399999)
print(a*b) # prints 1085410049 (159999200001 % 2**32)

实现这一点的最佳方法是什么,以便所有操作(包括按位移位)都能像C中那样工作?

最佳答案

您可以尝试使用ctypes.uint_32为您绑定结果:

>>> import ctypes
>>> print ctypes.c_uint32(399999 * 399999).value
1085410049

或者,您可以使用numpy的数据类型:
>>> import numpy as np
>>> a = np.uint32(399999)
>>> b = np.uint32(399999)
>>> a * b
__main__:1: RuntimeWarning: overflow encountered in uint_scalars
1085410049

08-20 03:13