2010-12-28 5 views
9

Почему 0x1p3 равно 8.0? Почему 0x1e3 равен 483, тогда как 0x1e3d равно 7741? Это сбивает с толку, так как 1e3d равно 1000.0.Представление чисел с плавающей запятой Java в виде шестнадцатеричных чисел

+2

Почему 'p' в' 0x1p3'? – marcog

+0

@marcog это часть способа выражения чисел с плавающей запятой, см. JLS: http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.10.2 – Jesper

+0

@marcog: это маркер экспоненты для шестнадцатеричного литерала с плавающей запятой, как определено в стандартах Java и C99. –

ответ

7

0x1e3 и 0x1e3d шестнадцатеричные числа литералов. Обратите внимание, что e и d являются шестнадцатеричными цифрами, а не индикатором экспоненты или индикатором типа double в этом случае.

1e3d является десятичной цифрой с плавающей запятой буквальный. e является индикатором показаний, d говорит, что это double, а не float.

Обозначение 0x1p3 - способ выражения литерала с плавающей запятой в шестнадцатеричном виде, как вы можете прочитать в section 3.10.2 Спецификации языка Java. Это означает 1 раз 2 мощности 3; показатель является двоичным (так что это 2-к-мощности вместо 10-к-мощности).

+0

Но 0x1p3 должен быть таким же, как 1e3 в этом случае, правильно? Но это не так. – serious

+0

@serious Нет, потому что показатель степени двоичный, а не десятичный. Его 2^3 не 10^3. – Jesper

+0

О, получилось, спасибо. – serious

2

0x1e3 шестнадцатеричный для 483, как это 0x1e3d гекса для 7741. e читаются как шестнадцатеричное число со значением 14.

+1

Ah, 0x1e3 - это шестнадцатеричное число, поэтому «e» здесь не означает экспонента. – serious

+0

Но 0x1p3 до сих пор неясно. – serious

+1

@serious, разница в том, что 0x1e3 является целым числом, а не числом с плавающей запятой. «E» в этом целой является просто неудачным совпадением, которое смущает. 0x1p3 - число с плавающей запятой. Это интерпретируется иначе. Интерпретация включает в себя _mantissa_ и _exponent_. Первая часть - 1.0 (обратите внимание на предполагаемую десятичную точку). Последняя является частью «p3», которая читает «до 3-й степени». Поскольку мы находимся в двоичном выражении, количество чисел до 3-й степени такое же, как и смещение 3 бит влево, поэтому 0b1 становится 0b1000. Это 8 в десятичной форме. –

Смежные вопросы