2011-12-22 81 views
31

java.lang.Double,有以下常數聲明:p在常量聲明

public static final double MAX_VALUE = 0x1.fffffffffffffP+1023; 
public static final double MIN_NORMAL = 0x1.0p-1022; 

什麼是P呢?案件的差異很重要嗎?

我知道的用於Long S,Double S和Float S中LDF,但在此之前從來沒有見過一個P

+0

十六進制浮點數,也許? – 2011-12-22 11:30:08

+0

「p」表示「power」(?)爲「e」可能被誤解爲十六進制符號(?) – moala 2011-12-22 15:30:16

回答

25

P(或p)指示十六進制floating-point literal,其中有效數字以十六進制指定。

使用p代替e。您看到的df後綴與您正好相反:0x1.0p+2f和都是有效文字(一個是float類型,另一個是double類型)。

乍一看這似乎是,0x前綴足以識別十六進制浮點文字,爲什麼選擇了Java的設計者改變從ep信?這與e是一個有效的十六進制數字有關,因此保留它會導致解析模糊。試想一下:

0x1e+2 

那是一個十六進制double或兩個整數,0x1e2的總和?當我們改變ep,模糊解決:如果使用十六進制定義了雙非字面

0x1p+2 
5

p語法。當你想要定義它的確切表示,但在通用代碼中沒有用時,這很有用,因爲你希望double是十進制值而不是一些十六進制模式。

2

它用來表示一個十六進制浮點數字。

甲浮點文字具有以下部分:一個整數部分, 一個十進制或十六進制點,一個小數部分,指數,和一個型後綴(用ASCII週期 字符表示)。 A 浮點數可以寫成十進制值,也可以寫成十六進制值 。對於十進制文字,指數(如果存在)是 ,由ASCII字母e或E表示,後面跟隨可選的有符號整數 。 對於十六進制文字,指數始終是必需的,並且 由ASCII字母p或P表示,後面跟有可選的 有符號整數。

http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#230798

3

這是一個十六進制浮點文字和語法是:*號0X *尾數* p *指數。有關說明,請參閱blog