statements operator logical expressions java bit-manipulation primitive

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;