statechanged - ¿Cómo funciona el tiempo de lanzamiento int en Java?
spinner model java (1)
Los 32 bits bajos de los long
se toman y se ponen en el int
.
Aquí está la matemática, sin embargo:
- Trate los valores
long
negativos como2^64
más ese valor. Por lo tanto,-1
se trata como 2 ^ 64 - 1. (Este es el valor de 64 bits sin firmar , y es cómo el valor se representa realmente en binario). - Toma el resultado y mod por 2 ^ 32. (Este es el valor de 32 bits sin firmar ).
- Si el resultado es> = 2 ^ 31, resta 2 ^ 32. (Este es el valor de 32 bits firmado, el
int
Java).
Esta pregunta no es acerca de cómo se debe convertir un largo correctamente en un int , sino en qué sucede cuando lo lanzamos incorrectamente en un int.
Entonces considera este código -
@Test
public void longTest()
{
long longNumber = Long.MAX_VALUE;
int intNumber = (int)longNumber; // potentially unsafe cast.
System.out.println("longNumber = "+longNumber);
System.out.println("intNumber = "+intNumber);
}
Esto da la salida -
longNumber = 9223372036854775807
intNumber = -1
Ahora supongamos que hago el siguiente cambio
long longNumber = Long.MAX_VALUE - 50;
Entonces obtengo la salida -
longNumber = 9223372036854775757
intNumber = -51
La pregunta es, ¿cómo se convierte el valor de long en un int?