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

时间:2012-08-30 23:03:26

标签: java primitive prefix primitive-types modifier

好吧,我已经用Java编程了三年的大部分时间,现在,并认为自己非常有经验。但是,在查看Java SE源代码时,我遇到了一些我没想到的事情:

<{1}} 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。我知道您可以使用后缀强制数字为Pdoublelong等,但我从未遇到过float或{{1 }}。我查了the Java API,但没有提到它。 在某处有完整的 Java原始数字文字修饰符列表吗?有谁知道这些?

作为参考,以下是我使用或遇到过的,其目的是以粗体显示问号(p代表相应限制内的任意数字):

后缀:

  • P = 32位整数#
  • # = 64位整数int
  • #L =另一个64位整数long
  • #l = 32位浮点l
  • #f =另一个32位浮点float
  • #F = 64位浮点float
  • #d =另一个64位浮点double
  • #D =科学记谱法
  • double =另一种科学记数法?
  • #e# =?
  • #E# =?
  • 了?

前缀:

  • #p = binary(base 2)literal
  • #P =另一个二进制(基数为2)字面值?
  • 0b# =八进制(base 8)literal
  • 0B# = decimal(base 10)literal
  • 0# =十六进制(base 16)literal
  • # =另一个十六进制(基数为16)字面值?
  • 了?

其他(是否有后缀或前缀?):

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

3 个答案:

答案 0 :(得分:7)

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

根据Javadoc for toHextString(我们知道正在使用它,因为它以0x开头:

  

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

     
      
  • 如果m是无穷大,则用字符串“Infinity”表示;因此,正无穷大产生结果“无穷大”和负数   无穷大产生结果“-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

     
      
  • l
  •   
  •   
     

OctalNumeral:

     
      
  • 0 OctalDigits
  •   
  • 0 Underscores OctalDigits
  •   
     

HexNumeral:

     
      
  • 0 x HexDigits
  •   
  • 0 X HexDigits
  •   
     

BinaryNumeral:

     
      
  • 0 b BinaryDigits
  •   
  • 0 B BinaryDigits
  •   

3.10.2. Floating-Point Literals

  

ExponentIndicator:

之一      
      
  • e
  •   
  • 电子
  •   
     

FloatTypeSuffix:

之一      
      
  • ˚F
  •   
  • F
  •   
  • d
  •   
  • d
  •   
     

HexSignificand:

     
      
  • HexNumeral
  •   
  • HexNumeral。
  •   
  • 0 x HexDigitsopt。 HexDigits
  •   
  • 0 X HexDigitsopt。 HexDigits
  •   
     

BinaryExponentIndicator:

之一      
      
  • p
  •   
  • P
  •   

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

答案 1 :(得分:3)

声明文字的所有合法方式都在JLS

中定义
  • pP是数字的二进制指数。
  • lL定义了long
  • fF定义了float
  • dD定义了double
  • 0B0b定义了二进制文字。
  • 0x0X定义了十六进制文字。
  • eE也是指数,但由于e是十六进制的有效字符,因此也会使用p

答案 2 :(得分:0)

PpBinaryExponentIndicator。请参阅Java语言规范。

请参阅http://docs.oracle.com/javase/specs/jls/se5.0/html/lexical.html#3.10.2