Java 常数声明中的P
在Java 常数声明中的P,java,Java,在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用于Longs、Doubles和Floats,但以前从未见过p。p(或p)表示十六进制,其中有效位用十六进制表示 使用p代替e。您看到的d和f后缀与此正交:
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
s和Float
s,但以前从未见过p
。p
(或p
)表示十六进制,其中有效位用十六进制表示
使用p
代替e
。您看到的d
和f
后缀与此正交:0x1.0p+2f
和0x1.0p+2d
都是有效的文本(一个是float
类型,另一个是double
)
乍一看,0x
前缀似乎足以识别十六进制浮点文字,那么为什么Java设计人员选择将字母从e
更改为p
?这与e
是一个有效的十六进制数字有关,因此保留它会导致解析歧义。考虑:
0x1e+2
那是十六进制的双精度还是两个整数的和,0x1e
和2
?当我们将e
更改为p
时,歧义得到解决:
0x1p+2
p
语法,如果用于定义十六进制中的双文本。当您想要定义它的精确表示时,这很有用,但在一般代码中不有用,因为您希望double是十进制值,而不是某些十六进制模式。它用于表示十六进制浮点文字
浮点文字包含以下部分:整数部分,
十进制或十六进制点(用ASCII句点表示)
字符)、小数部分、指数和类型后缀。A.
浮点数可以写为十进制值或数字
十六进制值。对于十进制文字,指数(如果存在)为
由ASCII字母e或e表示,后跟可选符号
整数对于十六进制文字,始终需要指数,并且
由ASCII字母p或p表示,后跟可选的
有符号整数。
从中,它是一个十六进制浮点文本,语法为:符号*0x*有效位*p*指数。请参见此以了解解释。十六进制浮点,可能会将“幂”(?)的“p”理解为“e”,而将其误解为十六进制符号(?)