3

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

我想出了一个简单的:

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

有没有更好的办法?

4

3 回答 3

4

最简单的可能解决方案:

def convert(x):
    if x >= 512:
        x -= 1024
    return x
于 2014-01-28T23:52:16.120 回答
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
于 2014-01-28T23:56:49.483 回答
0
 max_uint_value = 512

 def unassigned_to_int(uint):
      return uint - max_uint_value if uint >= max_uint_value else uint
于 2018-06-08T17:37:12.813 回答