Подтвердить что ты не робот

P в постоянной декларации

В java.lang.Double имеются следующие объявления констант:

public static final double MAX_VALUE = 0x1.fffffffffffffP+1023;
public static final double MIN_NORMAL = 0x1.0p-1022;

Что такое P для? Разница в важности?

Я знаю L, D и F, используемые для Long s, Double и Float s, но никогда не видел P раньше.

4b9b3361

Ответ 1

P (или P) указывает шестнадцатеричный литерал с плавающей запятой, где значение указано в шестнадцатеричном формате.

Вместо e используется P. Суффиксы d и f, которые вы видели, ортогональны этому: оба 0x1.0p+2f и 0x1.0p+2d являются допустимыми литералами (один имеет тип float, а другой имеет тип double).

На первый взгляд может показаться, что префикс 0x достаточен для идентификации литерала с шестнадцатеричной точкой с плавающей запятой, поэтому почему дизайнеры Java решили изменить букву от e до P? Это связано с тем, что e является действительной шестнадцатеричной цифрой, поэтому сохранение этого приведет к разбору парсинга. Рассмотрим:

0x1e+2

Является ли это шестнадцатеричным double или суммой двух целых чисел, 0x1e и 2? Когда мы меняем e на P, двусмысленность разрешается:

0x1p+2

Ответ 2

Синтаксис p, если используется для определения двойного литерала в шестнадцатеричном формате. Это полезно, когда вы хотите определить его точное представление, но не полезно в общем коде, потому что вы хотите, чтобы double был десятичным значением, а не шестнадцатеричным.

Ответ 3

Это шестнадцатеричный литерал с плавающей запятой, а синтаксис: sign * 0x * importantand * p * exponent. Смотрите blog для объяснения.

Ответ 4

Он используется для обозначения шестнадцатеричного литерала с плавающей запятой.

Литерал с плавающей запятой имеет следующие части: часть целого числа, десятичная или шестнадцатеричная точка (представлена ​​периодом ASCII символ), дробная часть, показатель степени и суффикс типа. число с плавающей запятой может быть записано либо как десятичное значение, либо как шестнадцатеричное значение. Для десятичных литералов показатель экспоненты, если присутствует, равен обозначенный буквой A или буквой ASCII, а затем необязательно подписанной целое число. Для шестнадцатеричных литералов показатель всегда требуется и обозначается буквой ASCII p или P, а затем необязательно целое число со знаком.

Из http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#230798