为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

郎朗坤 2021-03-11 14:18:03
在32位和64位进行整数数学运算的最佳方法是什么,以便像C语言一样发生溢出?例如(65536 * 65536 + 1)*(65536 * 65536 + 1)在64位数学运算中应为0x0000000200000001,而不是其确切值(不溢出)0x10000000200000001。
查看完整描述

2 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

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


查看完整回答
反对 回复 2021-03-26
?
呼唤远方

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正在按照您的意愿进行。


查看完整回答
反对 回复 2021-03-26
  • 2 回答
  • 0 关注
  • 231 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号