简体   繁体   中英

python 32-bit and 64-bit integer math with intentional overflow

What's the best way to do integer math in 32- and 64-bit, so that overflow happens like it does in C?

eg (65536*65536+1)*(65536*65536+1) should be 0x0000000200000001 in 64-bit math, and not its exact value (non-overflowing) 0x10000000200000001.

只是&使用适当的32位或64位掩码( 0xffffffff0xffffffffffffffff )的结果。

Use NumPy with the appropriate integer size and the overflow is more C like:

32 bit:

>>> np.uint32(2**32-3) + np.uint32(5)
__main__:1: RuntimeWarning: overflow encountered in uint_scalars
2

64 bit:

>>> i64=np.uint64(65536*65536+1)
>>> hex(i64*i64)
'0x200000001L'

Compare with Python's native int:

>>> hex((65536*65536+1)*(65536*65536+1))
'0x10000000200000001L'

You can see that NumPy is doing as you desire.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM