在32位和64位进行整数数学运算的最佳方法是什么,以便像C语言一样发生溢出?例如(65536 * 65536 + 1)*(65536 * 65536 + 1)在64位数学运算中应为0x0000000200000001,而不是其确切值(不溢出)0x10000000200000001。
2 回答

呼唤远方
TA贡献1856条经验 获得超11个赞
使用具有适当整数大小的NumPy,并且溢出更多为C,例如:
32位:
>>> np.uint32(2**32-3) + np.uint32(5)
__main__:1: RuntimeWarning: overflow encountered in uint_scalars
2
64位:
>>> i64=np.uint64(65536*65536+1)
>>> hex(i64*i64)
'0x200000001L'
与Python的本地int进行比较:
>>> hex((65536*65536+1)*(65536*65536+1))
'0x10000000200000001L'
您可以看到NumPy正在按照您的意愿进行。
添加回答
举报
0/150
提交
取消