我在将
int
、short
、short
打包到 long
中时遇到问题。
这是我到目前为止所得到的:
int p = 123456;
short x = -567;
short y = 789;
long l = (((long) p) << 32) | (x & 0xffff0000L) | (y & 0x0000ffffL);
int p2 = (int) (l >> 32);
short x2 = (short) (l >> 48);
short y2 = (short) l;
产生
p=123456, p2=123456
x=-567, x2=1 // bad result
y=789, y2=789
中间值不正确。我该如何解决这个问题?
您需要将
x
移过来:将 (x & 0xffff0000L)
替换为 ((x & 0x0000ffffL) << 16)
。
然后你需要修复班次才能检索它:
short x2 = (short) (l >> 16)
。