猿问

带有故意溢出的python 32位和64位整数数学

在32位和64位进行整数数学运算的最佳方法是什么,以便像C语言一样发生溢出?

例如(65536 * 65536 + 1)*(65536 * 65536 + 1)在64位数学运算中应为0x0000000200000001,而不是其确切值(不溢出)0x10000000200000001。


郎朗坤
浏览 232回答 2
2回答

萧十郎

只是&将结果与相应的32位或64位掩码(0xffffffff或0xffffffffffffffff)。

呼唤远方

使用具有适当整数大小的NumPy,并且溢出更多为C,例如:32位:>>> np.uint32(2**32-3) + np.uint32(5)__main__:1: RuntimeWarning: overflow encountered in uint_scalars264位:>>> i64=np.uint64(65536*65536+1)>>> hex(i64*i64)'0x200000001L'与Python的本地int进行比较:>>> hex((65536*65536+1)*(65536*65536+1))'0x10000000200000001L'您可以看到NumPy正在按照您的意愿进行。
随时随地看视频慕课网APP

相关分类

Python
我要回答