簡體   English   中英

什么是Java原始數據類型修飾符?

[英]What are the Java primitive data type modifiers?

好吧,我現在已經用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

我沒想到這一點,也無法找出它的含義。 如果您不知道,我指的是在減法運算符之前的這些數字之后的pP 我知道你可以使用后綴來強制數字為doublelongfloat等,但我從未遇到過pP 我檢查了Java API ,但沒有提到它。 某處是否有完整的Java原始數字文字修飾符列表? 有人都知道嗎?

作為參考,下面是我使用或遇到的那些,其目的是用粗體標記我的問號( #代表各自限制內的任意數字):

后綴:

  • # = 32位整數int
  • #L = 64位整數long
  • #l =另一個64位整數l
  • #f = 32位浮點float
  • #F =另一個32位浮點float
  • #d = 64位浮點double #d
  • #D =另一個64位浮點double
  • #e# =科學記數法
  • #E# =另一種科學記數法?
  • #p =?
  • #P =?
  • 還有嗎?

前綴:

  • 0b# =二進制(base 2)文字
  • 0B# =另一個二進制(基數2)字面值?
  • 0# =八進制(基數為8)字面值
  • # = decimal(base 10)literal
  • 0x# =十六進制(base 16)文字
  • 0X# =另一個十六進制(基數為16)字面值?
  • 還有嗎?

其他( 這些是后綴或前綴? ):

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

P是指數。 它是否是資本並不重要。

根據toHextStringJavadoc (我們知道它正在被使用,因為它以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

  • 大號

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

沒有為這些目的指定其他單個字符文字。

聲明文字的所有合法方法都在JLS中定義。

  • pP是數字的二進制指數。
  • lL定義long
  • fF定義一個float
  • dD定義了一個double
  • 0B0b定義二進制文字。
  • 0x0X定義十六進制文字。
  • eE也是指數,但由於e是十六進制的有效字符,因此也使用p

PpBinaryExponentIndicator 請參閱Java語言規范。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM