在python中将10位无符号整数转换为有符号整数

时间:2014-01-28 23:44:08

标签: python int uint

我有一个0-1023范围内的数字列表。我想将它们转换为整数,使得1023映射到-1,1022映射到-2等等。而0,1,2,.... 511保持不变。

我提出了一个简单的说法:

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

有更好的方法吗?

3 个答案:

答案 0 :(得分:2)

最可能的解决方案:

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

答案 1 :(得分:2)

def convert(x):
    return x - (x >> 9) * 1024

使用ctypes

from ctypes import c_short

def convert(x):
    return c_short(x << 6).value >> 6

答案 2 :(得分:0)

 max_uint_value = 512

 def unassigned_to_int(uint):
      return uint - max_uint_value if uint >= max_uint_value else uint