operator - Java almacenando dos ints en un largo
java<= (2)
Quiero almacenar dos ints en mucho tiempo (en lugar de tener que crear un nuevo objeto Point
cada vez).
Actualmente, he intentado esto. No funciona, pero no sé qué es lo que está mal:
// x and y are ints
long l = x;
l = (l << 32) | y;
Y estoy obteniendo los valores de int así:
x = (int) l >> 32;
y = (int) l & 0xffffffff;
Aquí hay otra opción que utiliza un bytebuffer en lugar de operadores bitwise. En cuanto a la velocidad, es más lento, alrededor de 1/5 de la velocidad, pero es mucho más fácil ver lo que está sucediendo:
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(1);
y
se está extendiendo el signo en el primer fragmento, que sobrescribiría x
con -1
siempre que y < 0
.
En el segundo fragmento, la conversión a int
se realiza antes del cambio, por lo que x
obtiene el valor de y
.
long l = (((long)x) << 32) | (y & 0xffffffffL);
int x = (int)(l >> 32);
int y = (int)l;