usar statechanged propiedades fecha event changeevent change bar java casting

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:

  1. Trate los valores long negativos como 2^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).
  2. Toma el resultado y mod por 2 ^ 32. (Este es el valor de 32 bits sin firmar ).
  3. 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?