2012-01-19 27 views
16

¿Por qué obtengo un número int es demasiado grande cuando el largo está asignado a min y max?Error de número largo de Java demasiado grande?

/* 
long: The long data type is a 64-bit signed two's complement integer. 
It has a minimum value of -9,223,372,036,854,775,808 and a maximum value of   9,223,372,036,854,775,807 (inclusive). 
Use this data type when you need a range of values wider than those provided by int. 
*/ 
package Literals; 

public class Literal_Long { 
    public static void main(String[] args) { 
     long a = 1; 
     long b = 2; 
     long min = -9223372036854775808; 
     long max = 9223372036854775807;//Inclusive 

     System.out.println(a); 
     System.out.println(b); 
     System.out.println(a + b); 
     System.out.println(min); 
     System.out.println(max); 
    } 
} 
+1

Se puede usar 'Long.MIN_VALUE' y' 'Long.MAX_VALUE' o 1L << -1' y' 1L >>> 1' –

Respuesta

54

Todos los números literales en Java son por defecto ints, que tiene rango de -2147483648-2147483647 inclusive.

Sus literales están fuera de este rango, por lo que para hacer esta compilación hay que indicar que son long literales (es decir, el sufijo con L):

long min = -9223372036854775808L; 
long max = 9223372036854775807L; 

Tenga en cuenta que java es compatible tanto para mayúsculas y minúsculas Ll, pero recomiendo no usando minúsculas l porque se ve como un 1:

long min = -9223372036854775808l; // confusing: looks like the last digit is a 1 
long max = 9223372036854775807l; // confusing: looks like the last digit is a 1 

Java Language Specification para el mismo

un literal entero es de tipo long si se añade como sufijo con una letra ASCII L o L (ELL); de lo contrario, es de tipo int (§4.2.1).

+0

Para ser pedante: También es posible usar una pequeña 'l '. – helpermethod

+8

@OliverWeiler Yo diría, para ser pedante, podrías ** pero no deberías ** usar un pequeño __l__ 'porque parece un __1__. – TC1

+0

Parece solo un 1 si usa una fuente incorrecta, pero seguro, ¿por qué arriesgar la confusión? – Bladt

17

Debe usar L para decirle al compilador que es un literal largo.

long min = -9223372036854775808L; 
long max = 9223372036854775807L;//Inclusive 
Cuestiones relacionadas