我在收拾行李
3 int
进入 short
然后得到值;我正在使用具有以下值的测试代码:
160, 71, 50
但当我试图解压这些值时,x&z错了,我明白 15, 71, 50
(请注意 15
什么时候 160
是预期的)。
为什么会这样?谢谢。我的密码是
public static void main(String[] args) {
int[] testValue = new int[]{160, 71, 50};
short packed = pack(testValue[0], testValue[1], testValue[2]);
int[] output = unpack(packed);
System.out.println(output[0]);
System.out.println(output[1]);
System.out.println(output[2]);
}
public static short pack(int x, int y, int z) {
return (short) (x << 12 | z << 8 | y);
}
public static int[] unpack(short packed) {
int x = packed >> 12 & 0xF;
int y = packed & 0xFF;
int z = packed >> 8 & 0xF;
return new int[]{x, y, z};
}
2条答案
按热度按时间0vvn1miw1#
在一个16位的短代码中,没有足够的位来打包这三个值。
以下是您的详细信息:
将这些因素组合在一起会导致:
它可以存储在3字节而不是2字节。当你投出一个短球时
如果可以将每个数字分别存储在5位中,则可以在短时间内拟合三个值。
每个数字从
0 - 31
对于无符号值。只有一个值可以占用6位。这将产生5 + 5 + 6 = 16
位。cczfrluj2#
嗯,这是不可能的;让我们看看为什么。我们有
3
要打包的值160, 71, 50
:请注意
我们至少需要21比特(
8 + 7 + 6
)当char
以及short
仅为16位值。