17

我只是想知道为什么会编译?它是什么意思,因为它确实编译?

System.out.println(0xp0); // p?

输出:

0.0
4

3 回答 3

11

JLS对此进行了解释:

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

于 2012-07-25T14:11:35.457 回答
9

这是一个浮点十六进制文字。

对于十六进制浮点字面量,至少需要一位数字(整数部分或小数部分),指数是强制性的,浮点类型后缀是可选的。指数由 ASCII 字母 p 或 P 表示,后跟一个可选的有符号整数。

请参阅此处的规范。

于 2012-07-25T14:12:39.997 回答
0

仅供参考,这里是如何手动将以下转换为十进制数:

double hfpl = 0x1e.18p4;
System.out.println(hfpl); // 481.5

在此处输入图像描述

于 2016-02-17T20:41:42.907 回答