2011-12-22 82 views
31

java.lang.Double,有以下常数声明:p在常量声明

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

什么是P呢?案件的差异很重要吗?

我知道的用于Long S,Double S和Float S中LDF,但在此之前从来没有见过一个P

+0

十六进制浮点数,也许? – 2011-12-22 11:30:08

+0

“p”表示“power”(?)为“e”可能被误解为十六进制符号(?) – moala 2011-12-22 15:30:16

回答

25

P(或p)指示十六进制floating-point literal,其中有效数字以十六进制指定。

使用p代替e。您看到的df后缀与您正好相反:0x1.0p+2f和都是有效文字(一个是float类型,另一个是double类型)。

乍一看这似乎是,0x前缀足以识别十六进制浮点文字,为什么选择了Java的设计者改变从ep信?这与e是一个有效的十六进制数字有关,因此保留它会导致解析模糊。试想一下:

0x1e+2 

那是一个十六进制double或两个整数,0x1e2的总和?当我们改变ep,模糊解决:如果使用十六进制定义了双非字面

0x1p+2 
5

p语法。当你想要定义它的确切表示,但在通用代码中没有用时,这很有用,因为你希望double是十进制值而不是一些十六进制模式。

2

它用来表示一个十六进制浮点数字。

甲浮点文字具有以下部分:一个整数部分, 一个十进制或十六进制点,一个小数部分,指数,和一个型后缀(用ASCII周期 字符表示)。 A 浮点数可以写成十进制值,也可以写成十六进制值 。对于十进制文字,指数(如果存在)是 ,由ASCII字母e或E表示,后面跟随可选的有符号整数 。 对于十六进制文字,指数始终是必需的,并且 由ASCII字母p或P表示,后面跟有可选的 有符号整数。

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

3

这是一个十六进制浮点文字和语法是:*号0X *尾数* p *指数。有关说明,请参阅blog