Naivest possible solution:
def convert(x):
if x >= 512:
x -= 1024
return x
Question
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?
Solution
Naivest possible solution:
def convert(x):
if x >= 512:
x -= 1024
return x
OTHER TIPS
def convert(x):
return x - (x >> 9) * 1024
Using ctypes
:
from ctypes import c_short
def convert(x):
return c_short(x << 6).value >> 6
max_uint_value = 512
def unassigned_to_int(uint):
return uint - max_uint_value if uint >= max_uint_value else uint