La larga x
que está creando no es el valor que se esperaba. Está en el rango entero. Para crear largos, utilice:
final long x = 24L*60L*60L*1000L*1000L;
final long y = 24L*60L*60L*1000L;
System.out.println(x/y);
El x
se computada, en el rango de números enteros, era 500654080
. Esto se divide por y
(= 86400000
), resulta en 5.794607407407407...
. Java trunca la parte decimal que hace que el
5.
Mediante la adición de un L
después de que el número literal, se indica al compilador para compilar como un long
en lugar de un int
. El valor para x
que esperaba es 86400000000
. Pero fue compilado como un int.
podemos reproducir el valor incorrecto para x
(500654080
) truncándolo a un int:
// First correct
long x = 24L*60L*60L*1000L*1000L;
/* x = `86400000000`; */
// Now truncate
x &= 0xFFFFFFFFL; // again: don't forget the L suffix
/* x = `500654080` */
http://ideone.com/z78Sg –
http: // Ideone.com/3vygF –