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”,而将其误解为十六进制符号(?)