Estoy haciendo una clase PackedUnsigned1616 que almacena dos pantalones cortos sin firmar en un int, y una clase PackedSigned1616 que almacena dos cortos firmados en un int. He leído sobre las operaciones a nivel de bit, pero todavía estoy confundido sobre cómo manejar firmado y sin firmar, y los valores que son más grandes o más pequeños que el rango de un corto (se pasan como dos entradas). Esto es lo que tengo hasta ahora:Embalaje de dos pantalones cortos en uno entero, con negativo y positivo
public final class PackedUnsigned1616 {
public final int field;
private static final int RIGHT = (2 << 15) - 1;
private static final int LEFT = ((2 << 31) - 1)^RIGHT;
public PackedUnsigned1616(int left, int right) {
field = (left << 15) | (right & RIGHT);
}
public int getLeft() {
return field >> 15;
}
public int getRight() {
return field & RIGHT;
}
}
Todo este concepto me está confundiendo mucho, por lo que si usted podría arrojar un poco de luz sobre ella, que ayudaría enormemente.
bien lo que es el comportamiento deseado? El short más grande que puedes representar es '(2 << 15) -1 'así que si llamas al constructor con un número más grande que eso, ¿qué debería pasar? – MatrixFrog
Oh, lo siento, quiero que se sujete –
¿Es por diversión o para resolver un problema real? –