P在不断的声明中

Ric*_*ich 31 java

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

public static final double MAX_VALUE = 0x1.fffffffffffffP+1023;
public static final double MIN_NORMAL = 0x1.0p-1022;
Run Code Online (Sandbox Code Playgroud)

有什么P用?区别重要吗?

我知道L,DF用于Longs,Doubles和Floats,但从未见过P以前.

NPE*_*NPE 29

P(或p)表示是十六进制浮点文字,其中所述有效数在十六进制指定.

p被用来代替e.该df你已经看到后缀正交这样的:既0x1.0p+2f0x1.0p+2d有效文本(一个是类型的float,另一种是类型double).

乍一看,似乎0x前缀足以识别十六进制浮点字面值,那么为什么选择Java设计者将字母更改ep?这与e作为有效的十六进制数字有关,因此保持它会引起解析歧义.考虑:

0x1e+2
Run Code Online (Sandbox Code Playgroud)

这是十六进制double还是两个整数的总和,0x1e并且2?当我们改变ep,歧义得到解决:

0x1p+2
Run Code Online (Sandbox Code Playgroud)


Pet*_*rey 5

p用于在十六进制中定义双字面值的语法.当您想要定义其精确表示但在通用代码中没有用时,这非常有用,因为您希望double是十进制值而不是某些十六进制模式.