2009-02-19 41 views

Respuesta

70

significa octal 123, es decir 1 * 8 * 8 * 8 + 2 + 3, que es igual a 83. Por alguna razón, los flotadores octales no están disponibles.

Creaciónsignifica el número entero 83. La creación de 0123F significa que la flota 123. Cuando se convierte de nuevo a número entero, sigue siendo 123.

simplemente no lo utiliza el 0 si no decir octal. Después de todo, no son exactamente útiles (y los programadores que sí conocen los números octales se confundirán cuando vean el 09F).

+3

Y si quiere un número hexadecimal, necesita comenzar con 0x, no con 0. Entonces 0123F es un flotador, 0x123F es hexadecimal. –

+0

@James Socol - Buen complemento. –

+1

¿Pero por qué el 0 principal? Me han dicho que es lo mismo en C, pero eso no explica por qué es 0, y ningún otro carácter aleatorio ASCII. – whirlwin

12

Porque los literales enteros que comienzan con 0 se tratan como números octales.

Véase la sección 3.10.1 de las JLS

+0

Gracias por la información amigo ... no lo sé. –

+0

Enlace muerto. Por favor, actualice el enlace (preferiblemente con un extracto aquí). – cst1992

6

Prueba esto:

public static String leftPad(int n, int padding) { 
    return String.format("%0" + padding + "d", n); 
} 
leftPad(5, 3); // return "005" 
leftPad(15, 5); // return "00015" 
leftPad(224, 3); // return "224" 
leftPad(0, 4); // return "0000" 
4

primero impresa como 83 porque java tomacomo número octal e imprime equivalente decimal de ese número.

0

printf lo hará: http://java.sun.com/developer/technicalArticles/Programming/sprintf/

public class X 
{ 
    public static void main(final String[] argv) 
    { 
     System.out.printf("%04d", 123); 
     System.out.println(); 
    } 
} 

También podría hacer que "%0" + size + "%d" si desea variar la longitud ... aunque si las longitudes eran comunes probablemente me hago constantes como "%04d", "%012d", etc ...

2

El octal (0 a la izquierda) y hexadecimal (0x) fueron heredados de C. Para la comparación, intente

System.out.println(0x123); 
0

En Java, los literales enteros con un cero inicial son enteros octales (base 8).

1 * 8^2 + 2 * 8 + 8 = 83 

Así que no utilice ningún número que conduzca con 0, si no desea tratarlo como número octal.

Cualquier número con sufijo 'F' se trata como número flotante.

En dado ejemplo (inf)0123F se imprime 123 porque 0123F tratado como flotador (123) y se convierte a int valor permanece 123.

1
-> 83 
1010L -> 1010 
0101L -> 65 

Los números 1010L y 0101L no son en representación binaria (sólo para evitar la confusión)
Estos números están en representación decimal.

Incluso según los patrones Regex en Oracle docs,

\ 0n es el carácter con el valor 0n octal (0 < = n < = 7)
\ xhh es el carácter con el valor hexadecimal 0xhh

Por lo tanto, su número 0101 ya sea en Integer o Long formato se trata como una representación octal de un número.

123 => 1 * 8^2 + 2 * 8^1 + 1 * 8^0 = 83 
0101 => 1 * 8^2 + 0 * 8^1 + 1 * 8^0 = 64 + 0 + 1 = 65 
Cuestiones relacionadas