Simulating int arithmetic with wrap-around

Random832 random832 at fastmail.com
Tue Jan 3 16:43:04 EST 2017


On Fri, Dec 30, 2016, at 09:47, Steve D'Aprano wrote:
> Again, assume both operands are in range for an N-bit signed integer.
> What's
> a good way to efficiently, or at least not too inefficiently, do the
> calculations in Python?

I'd do something like:

bit_mask = (1 << bits) - 1 # 0xFFFF sign_bit = 1 << (bits - 1) # 0x8000 
sign_ext = ~bit_mask # ...FFFFF0000

def signed(value):
    if value & sign_bit:
        return value | sign_ext
    else:
        return value & bit_mask

def unsigned(value):
    return value & bit_mask

And also avoid doing it on intermediate steps where it can be shown to not 
affect the result or allow the value to grow too large.




More information about the Python-list mailing list