[英]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
我沒想到這一點,也無法找出它的含義。 如果您不知道,我指的是在減法運算符之前的這些數字之后的p
和P
我知道你可以使用后綴來強制數字為double
, long
, float
等,但我從未遇到過p
或P
我檢查了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是指數。 它是否是資本並不重要。
根據toHextString
的Javadoc (我們知道它正在被使用,因為它以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中定義。
p
或P
是數字的二進制指數。 l
或L
定義long
。 f
或F
定義一個float
。 d
或D
定義了一個double
。 0B
或0b
定義二進制文字。 0x
或0X
定義十六進制文字。 e
或E
也是指數,但由於e
是十六進制的有效字符,因此也使用p
。 P
或p
是BinaryExponentIndicator
。 請參閱Java語言規范。
見http://docs.oracle.com/javase/specs/jls/se5.0/html/lexical.html#3.10.2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.