0xp0 prints 0.0 (Шестнадцатеричный плавающий текст)
Мне просто интересно, почему это компилируется? и что это значит, потому что он компилируется?
System.out.println(0xp0); // p?
ВЫВОД:
0.0
Ответ 1
Это шестнадцатеричный литерал с плавающей запятой.
Для шестнадцатеричных литералов с плавающей запятой требуется, по крайней мере, одна цифра (либо в целом, либо в части доли), и показатель степени является обязательным, а суффикс типа float является необязательным. Показатель обозначается буквой ASCII p или P, за которой следует необязательно целое число со знаком.
HexadecimalFloatingPointLiteral:
HexSignificand BinaryExponent FloatTypeSuffixopt
HexSignificand:
HexNumeral
HexNumeral .
0 x HexDigitsopt . HexDigits
0 X HexDigitsopt . HexDigits
BinaryExponent:
BinaryExponentIndicator SignedInteger
BinaryExponentIndicator:one of
p P
Исходя из вышеизложенного, я ожидал бы обязательный .HexDigit до p.
Ответ 3
Просто для справки, вот как вручную преобразовать следующее в десятичное число: