什么是Java原始数据类型修饰符?

Sup*_*tar 6 java primitive modifier prefix primitive-types

好吧,我现在已经用Java编程了三年的时间,并认为自己非常有经验.但是,在查看Java SE源代码时,我碰到了一些我没想到的东西:

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
Run Code Online (Sandbox Code Playgroud)

我没想到这一点,也无法找出它的含义.如果你不知道,我指的是pP是这些数字后,减法运算符之前.我知道你可以使用后缀来迫使数是一个double,long,float等等,但我从来没有遇到过pP.我检查了Java API,但没有提到它.某处是否有完整的Java原始数字文字修饰符列表?有人都知道吗?

作为参考,下面是我使用或遇到的那些,其目的是以粗体标记我的问号(#代表相应限制内的任意数字):

后缀:

  • # = 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# = binary(base 2)literal
  • 0B# =另一个二进制(基数2)字面值?
  • 0# =八进制(基数为8)字面值
  • # =十进制(基数10)字面值
  • 0x# =十六进制(base 16)字面值
  • 0X# =另一个十六进制(基数为16)字面值?
  • 还有吗?

其他(这些是后缀或前缀?):

  • (byte)# = 8位整数 byte
  • (short)# = 16位整数 short
  • (char)# - 32位字符 char

cor*_*iKa 7

P是指数.它是否是资本并不重要.

根据Javadoc fortoHextString(我们知道它正在使用,因为它始于0x:

public static String toHexString(double d)返回double参数的十六进制字符串表示形式.下面提到的所有字符都是ASCII字符.如果参数是NaN,则结果是字符串"NaN".否则,结果是一个表示参数的符号和大小的字符串.如果符号为负数,则结果的第一个字符为' - '('\ u002D'); 如果符号为正,则结果中不会出现符号字符.至于幅度m:

  • 如果m是无穷大,则用字符串"Infinity"表示; 因此,正无穷大产生结果"无穷大",负
    无穷大产生结果"无穷大".

  • 如果m为零,则由字符串"0x0.0p0"表示; 因此,负零产生结果"-0x0.0p0",正零产生结果"0x0.0p0".

  • 如果m是具有规范化表示的double值,则子串用于表示有效数和指数字段.有效数字由字符"0x1"表示.然后是有效数字的其余部分的小写十六进制表示作为分数.除非所有数字都为零,否则将删除十六进制表示中的尾随零,在这种情况下使用单个零.接下来,指数由"p"表示,后跟无偏指数的十进制字符串,就好像通过对指数值调用Integer.toString产生的一样.

  • 如果m是具有次正规表示的double值,则有效数字由字符"0x0"表示.其次是有效数字的其余部分的十六进制表示.删除十六进制表示中的尾随零.接下来,指数由"p-1022"表示.请注意,在次正规有效数中必须至少有一个非零数字.

根据JLS,接受以下语法:

3.10.1. Integer Literals

IntegerTypeSuffix:

  • 大号

OctalNumeral:

  • 0 OctalDigits
  • 0下划线OctalDigits

HexNumeral:

  • 0 x HexDigits
  • 0 X HexDigits

BinaryNumeral:

  • 0 b BinaryDigits
  • 0 B BinaryDigits

3.10.2. Floating-Point Literals

ExponentIndicator:其中之一

  • Ë
  • Ë

FloatTypeSuffix:其中之一

  • F
  • F
  • d
  • d

HexSignificand:

  • HexNumeral
  • HexNumeral.
  • 0 x HexDigitsopt.HexDigits
  • 0 X HexDigitsopt.HexDigits

BinaryExponentIndicator:其中之一

  • p
  • P

没有为这些目的指定其他单个字符文字.