Cast a 10 bit unsigned integer to a signed integer in python

Fra picture Fra · Jan 29, 2014 · Viewed 7.3k times · Source

I have a list of numbers in the range 0-1023. I would like to convert them to integers such that 1023 maps to -1, 1022 maps to -2 etc.. while 0, 1, 2, ....511 remain unchanged.

I came up with a simple:

def convert(x):
    return (x - 2**9) % 2**10 - 2**9

is there a better way?

Answer

Brave Sir Robin picture Brave Sir Robin · Jan 29, 2014

Naivest possible solution:

def convert(x):
    if x >= 512:
        x -= 1024
    return x