2010-12-28 19 views
9

¿Por qué 0x1p3 es igual a ? ¿Por qué 0x1e3 es igual a 483, mientras que 0x1e3d es igual a 7741? Es confuso ya que 1e3d es igual a 1000.0.Representación de los números flotantes de Java como números hexadecimales

+2

¿Por qué el 'p' en' 0x1p3'? – marcog

+0

@marcog esto es parte de una forma de expresar números en coma flotante, consulte el JLS: http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.10.2 – Jesper

+0

@marcog: ese es el marcador de exponente para un literal de punto flotante hexadecimal, como se define en los estándares Java y C99. –

Respuesta

7

0x1e3 y 0x1e3d son hexadecimal número entero literales. Tenga en cuenta que e y d son dígitos hexadecimales, no el indicador de exponente o el indicador de tipo double en este caso.

1e3d es un decimal punto flotante literal. El e es el indicador del exponente, el d dice que esto es un double en lugar de un float.

La notación 0x1p3 es una manera de expresar un literal de coma flotante en hexadecimal, como se puede leer en section 3.10.2 de la especificación del lenguaje Java. Significa 1 por 2 a la potencia 3; el exponente es binario (por lo tanto, es 2-a-la-potencia en lugar de 10-a-la-potencia).

+0

Pero 0x1p3 debería ser igual que 1e3 en este caso, ¿verdad? Pero no lo son. – serious

+0

@serious No, porque el exponente es binario, no decimal. Es 2^3 no 10^3. – Jesper

+0

Oh, lo tengo, gracias. – serious

2

0x1e3 es hexadecimal para 483, como es hex 0x1e3d para 7741. está siendo leído El e como un dígito hex con valor 14.

+1

Ah, 0x1e3 es un número hexadecimal, por lo que "e" no significa un exponente aquí. – serious

+0

Pero 0x1p3 aún no está claro. – serious

+1

@serious, la diferencia es que 0x1e3 es un número entero, no un número de coma flotante. La 'e' en ese entero es solo una desafortunada coincidencia que confunde. 0x1p3 es un número de punto flotante. Se interpreta _muy_ de manera diferente. La interpretación incluye un _mantissa_ y un _exponent_. La primera es la parte 1.0 (tenga en cuenta el punto decimal supuesto). La última es la parte 'p3' que dice 'a la tercera potencia'. Dado que estamos en modo binario, llevar un número a la tercera potencia es lo mismo que moverlo 3 bits hacia la izquierda, por lo que 0b1 se convierte en 0b1000. Eso es 8 en decimal. –

Cuestiones relacionadas