Java在一个长时间内存储两个整数

2022-09-01 05:41:57

我想在一长串中存储两个整数(而不是每次都创建一个新对象)。Point

目前,我尝试了这个。它不起作用,但我不知道它有什么问题:

// x and y are ints
long l = x;
l = (l << 32) | y;

我得到的int值是这样的:

x = (int) l >> 32;
y = (int) l & 0xffffffff;

答案 1

y在第一个代码段中进行符号扩展,这将覆盖 when 。x-1y < 0

在第二个代码段中,强制转换为是在移位之前完成的,因此实际上获取 的值。intxy

long l = (((long)x) << 32) | (y & 0xffffffffL);
int x = (int)(l >> 32);
int y = (int)l;

答案 2

这是另一个使用字节缓冲器而不是按位运算符的选项。在速度方面,它更慢,大约是速度的1/5,但更容易看到正在发生的事情:

long l = ByteBuffer.allocate(8).putInt(x).putInt(y).getLong(0);
//
ByteBuffer buffer = ByteBuffer.allocate(8).putLong(l);
x = buffer.getInt(0);
y = buffer.getInt(4);