2011-12-22 13 views
31

In java.lang.Double, vi sono le seguenti dichiarazioni di costanti:P in costante dichiarazione

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

Qual è il P per? La differenza è importante?

sono consapevole del L, D e F utilizzato per Long s, Double s e Float s, ma non hanno mai visto un P prima.

+0

Un galleggiante esadecimale, forse? –

+0

"p" per "potenza" (?) Poiché "e" potrebbe essere frainteso come simbolo esadecimale (?) – moala

risposta

25

Il P (o p) indica un valore esadecimale floating-point literal, in cui il significato è specificato in esadecimale.

Il p viene utilizzato al posto di e. I suffissi d e f che hai visto sono ortogonali a questo: sia 0x1.0p+2f sia sono valori letterali validi (uno è di tipo float e l'altro è di tipo double).

A prima vista potrebbe sembrare che il prefisso 0x è sufficiente per identificare un esagono virgola mobile letterale, quindi perché hanno i progettisti di Java scelto di modificare la lettera e-p? Questo ha a che fare con e che è una cifra esadecimale valida, quindi mantenerla genererebbe ambiguità di parsing. Considerare:

0x1e+2 

È che un esagono double o la somma di due numeri interi, 0x1e e 2? Quando cambiamo e a p, detta ambiguità:

0x1p+2 
5

Il p sintassi se utilizzato per definire una camera letterale in esadecimale. Ciò è utile quando si desidera definire la sua rappresentazione esatta ma non è utile nel codice generale perché si desidera che il doppio sia un valore decimale piuttosto che un modello esadecimale.

2

Viene utilizzato per indicare un letterale in virgola mobile esadecimale.

A virgola mobile letterale ha le seguenti parti: un numero intero parte, decimale o esadecimale punto (rappresentato da un periodo ASCII carattere), una parte frazionaria, un esponente, e un suffisso tipo. Un numero in virgola mobile può essere scritto come valore decimale o come valore esadecimale . Per i letterali decimali, l'esponente, se presente, è indicato dalla lettera ASCII e o E seguita da un numero intero con opzione opzionale. Per i letterali esadecimali, l'esponente è sempre richiesto e è indicato dalla lettera ASCII p seguita da un numero intero con segno facoltativo.

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

3

E 'una virgola mobile esadecimale letterale e la sintassi è: Segno * 0x * * significando p * esponente. Vedere questo blog per una spiegazione.

Problemi correlati