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;
我想在一长串中存储两个整数(而不是每次都创建一个新对象)。Point
目前,我尝试了这个。它不起作用,但我不知道它有什么问题:
// x and y are ints
long l = x;
l = (l << 32) | y;
我得到的int值是这样的:
x = (int) l >> 32;
y = (int) l & 0xffffffff;
y
在第一个代码段中进行符号扩展,这将覆盖 when 。x
-1
y < 0
在第二个代码段中,强制转换为是在移位之前完成的,因此实际上获取 的值。int
x
y
long l = (((long)x) << 32) | (y & 0xffffffffL);
int x = (int)(l >> 32);
int y = (int)l;
这是另一个使用字节缓冲器而不是按位运算符的选项。在速度方面,它更慢,大约是速度的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);