好吧,我已经用 Java 编程三年了,现在,我认为自己非常有经验。然而,在查看 Java SE 源代码时,我遇到了一些意想不到的事情:
in class
Double
:
public static final double MIN_NORMAL = 0x1.0p-1022; // 2.2250738585072014E-308
public static final double MIN_VALUE = 0x0.0000000000001P-1022; // 4.9e-324
我没想到会这样,也不明白这意味着什么。如果你不知道,我指的是p
and P
位于这些数字之后、减法运算符之前。我知道你可以使用后缀来强制数字成为double
, long
, float
等等,但我从未遇到过p
or P
。我检查了Java API http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html,但没有提及。有没有completeJava 原始数字文字修饰符列表在某处?有人认识他们吗?
作为参考,下面是我使用过或遇到过的,其中那些我无法理解的用粗体和问号(#
代表各自限制内的任意数字):
后缀:
-
#
= 32 位整数int
-
#L
= 64 位整数long
#l
= 另一个 64 位整数l
?
-
#f
= 32 位浮点float
#F
= 另一个 32 位浮点数float
?
-
#d
= 64 位浮点double
#D
= 另一个 64 位浮点数double
?
-
#e#
= 科学记数法
#E#
= 另一种科学记数法?
#p
= ?
#P
= ?
- 还有吗?
前缀:
-
0b#
= 二进制(以 2 为基数)文字
0B#
= 另一个二进制(基数 2)文字?
-
0#
= 八进制(基数 8)文字
-
#
= 十进制(以 10 为基数)文字
-
0x#
= 十六进制(以 16 为底)文字
0X#
= 另一个十六进制(基数 16)文字?
- 还有吗?
Other (这些有后缀或前缀吗?):
-
(byte)#
= 8 位整数byte
-
(short)#
= 16 位整数short
-
(char)#
- 32位字符char
P 是指数。是不是资本并不重要。
根据Javadoc 为toHextString http://docs.oracle.com/javase/6/docs/api/java/lang/Double.html#toHexString(double)(我们知道正在使用它,因为它开头为0x
:
public static String toHexString(double d)
返回双参数的十六进制字符串表示形式。下面提到的所有字符都是 ASCII 字符。如果参数为 NaN,则结果为字符串“NaN”。否则,结果是一个表示参数的符号和大小的字符串。如果符号为负,则结果的第一个字符为'-'('\u002D');如果符号为正,则结果中不出现符号字符。至于震级m:
-
如果m为无穷大,则用字符串“Infinity”表示;因此,正无穷产生结果“Infinity”,负无穷产生结果“Infinity”
无穷大产生结果“-Infinity”。
-
如果m为零,则用字符串“0x0.0p0”表示;因此,负零产生结果“-0x0.0p0”,正零产生结果“0x0.0p0”。
-
如果 m 是具有标准化表示的双精度值,则使用子字符串来表示有效数和指数字段。有效数由字符“0x1”表示。后跟剩余有效数字的小写十六进制表示形式。除非所有数字都为零,否则将删除十六进制表示形式中的尾随零,在这种情况下,将使用单个零。下一个,指数由“p”表示,后跟无偏指数的十进制字符串就好像通过对指数值调用 Integer.toString 生成的一样。
-
如果 m 是具有次正规表示的双精度值,则尾数由字符“0x0”表示。后跟剩余有效数的十六进制表示形式的分数。十六进制表示中的尾随零被删除。接下来,指数由“p-1022”表示。请注意,次正规有效数中必须至少有一个非零数字。
根据JLS http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.10,接受以下语法:
3.10.1. Integer Literals
IntegerTypeSuffix
:
八进制数字:
十六进制数字:
二进制数字:
3.10.2. Floating-Point Literals
指数指标:其中之一
FloatTypeSuffix:其中之一
十六进制有效数:
- 十六进制数字
- 十六进制数字。
- 0 x 十六进制数字选择。十六进制数字
- 0 X 十六进制数字选择。十六进制数字
BinaryExponentIndicator:其中之一
没有为这些目的指定其他单字符文字。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)