Python将int转换为unsigned short然后返回int

时间:2015-12-13 01:50:49

标签: python type-conversion bitwise-operators bit-shift

坐标x,y使用此函数

以整数编码
import groovy.transform.CompileStatic

@CompileStatic
class Example {
    def foo() {
        fooo() // highlighted as `Cannot resolve symbol 'fooo'`: shows as error in IJ14
    }
}

似乎x已被转换为无符号短文。

x和y在[-32767 32767]

范围内

将索引转换为x,y元组的函数是什么?

1 个答案:

答案 0 :(得分:3)

所有的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 1。详细了解bitwise AND

(y - 16) << 16将数字y - 16向左移16位。因此,如果您的数字是二进制的XXXXX,它将变为XXXXX0000000000000000。详细了解bitwise shift

A | B将对两个数字的位进行OR运算。由于A右边16个,B长16个,因此A和B不会相互干扰。详细了解bitwise OR

一旦你理解了这一点,就应该清楚我的功能是如何反过来的。

示例

>>> index = index_from_xy(1234, 5678)
>>> index
371066066
>>> xy_from_index(index)
(1234, 5678)