Python将整型转换为无符号短型,然后再转换回整型

Python将整型转换为无符号短型,然后再转换回整型,python,type-conversion,bitwise-operators,bit-shift,Python,Type Conversion,Bitwise Operators,Bit Shift,使用此函数将坐标x,y编码为整数 #将X Y位置转换为映射文件索引 def index_from_xy(x,y): return(y-16)所有python整数都是长整数(除非您使用的是更大的数字) 要提取x和y,只需颠倒上述函数的步骤即可 def int_to_signed_short(value): return -(value & 0x8000) | (value & 0x7fff) def xy_from_index(index): x, y = ind

使用此函数将坐标x,y编码为整数

#将X Y位置转换为映射文件索引
def index_from_xy(x,y):

return(y-16)所有python整数都是长整数(除非您使用的是更大的数字)

要提取x和y,只需颠倒上述函数的步骤即可

def int_to_signed_short(value):
    return -(value & 0x8000) | (value & 0x7fff)

def xy_from_index(index):
    x, y = index & 65535, (index >> 16) + 16
    return map(int_to_signed_short, [x, y])
更详细地说,您的函数接受这两个数字并将它们以二进制形式移位,这样它们就不会相互重叠

x&65535
只保留
x
最右边的16位,因为65535在二进制中是16 1s。阅读更多关于


(y-16)所有python整数都是长的(除非你在玩更大的数字)

要提取x和y,只需颠倒上述函数的步骤即可

def int_to_signed_short(value):
    return -(value & 0x8000) | (value & 0x7fff)

def xy_from_index(index):
    x, y = index & 65535, (index >> 16) + 16
    return map(int_to_signed_short, [x, y])
更详细地说,您的函数接受这两个数字并将它们以二进制形式移位,这样它们就不会相互重叠

x&65535
只保留
x
最右边的16位,因为65535在二进制中是16 1s。阅读更多关于


(y-16)它不起作用>>从_index开始的xy(从_xy开始的index(index)(-100,70)(65436,70)"有符号"整数只是一种约定,其中最高有效位设为1的每个值都被认为是负数。如果你想把这些视为签名,你也应该这样做。看到这条线索:@nicolas-f很好,我没有考虑过负数。查看更新后的答案。它不起作用>>>xy from_index(index_from_xy(-100,70))(65436,70)“有符号”整数只是一种约定,其中最高有效位设置为1的每个值都被视为负值。如果你想把这些视为签名,你也应该这样做。看到这条线索:@nicolas-f很好,我没有考虑过负数。请参阅更新的答案。