¿Por qué 08 no es un literal entero válido en Java?

Resuelto user871303 asked hace 13 años • 6 respuestas

¿Por qué se 08considera un int fuera de rango pero 07los siguientes no lo son?

user871303 avatar Aug 28 '11 09:08 user871303
Aceptado

En Java y varios otros lenguajes, un literal entero que comienza con 0se interpreta como una cantidad octal (base 8).

Para números de un solo dígito (excepto 08y 09, que no están permitidos), el resultado es el mismo, por lo que es posible que no notes que se interpretan como octales. Sin embargo, si escribe números con más de un dígito significativo, el resultado podría confundirlo.

Por ejemplo:

010 ==  8
024 == 20

Dado que los literales octales generalmente no son lo que desea, siempre debe tener cuidado de no comenzar nunca un literal entero con 0, a menos, por supuesto, que en realidad esté intentando escribir cero por sí mismo.

Stuart Cook avatar Aug 28 '2011 03:08 Stuart Cook

Cualquier número con el prefijo 0 se considera octal. Los números octales solo pueden usar dígitos del 0 al 7, al igual que los decimales pueden usar del 0 al 9 y los binarios pueden usar del 0 al 1.

// octal to decimal
01  // 1
02  // 2
07  // 7
010 // 8
020 // 16

// octal to binary (excluding most significant bit)
01  // 1 
02  // 10
07  // 111
010 // 1000 
020 // 10000

Hay 10 tipos de personas, las que entienden el ternario, las que no y las que piensan que esto es una broma estúpida.

cwallenpoole avatar Aug 28 '2011 02:08 cwallenpoole

De la especificación de Java :

Un número octal consta de un dígito ASCII 0 seguido de uno o más dígitos ASCII del 0 al 7 y puede representar un número entero positivo, cero o negativo.

Mahmoud Hanafy avatar Aug 28 '2011 03:08 Mahmoud Hanafy