2011-07-29 230 views
2

當我看wikipedia page for Offset Binary,我不能遵循下面的句子:偏移二進制格式

不同尋常然而,代替使用「過量2 ^(N-1)」,它使用「多餘的 2 ^(n-1)-1「,這意味着反轉指數的前導(高位)位將不會將指數轉換爲正確的二進制補碼 表示法。

任何人都可以解釋它的細節和給我一些例子嗎?

回答

2

這是指數的範圍,它允許您計算1/Float.MAX_VALUE和1/Float.MIN_NORMAL而不會變爲零或無窮大。如果還有一個負指數和一個較小的正指數(偏移量爲128),則1/Float.MIN_NORMAL爲無窮大。


浮點指數是偏移而不是普通的二補數。

例如對於double 0指數是1023或0b0111111111的11位值,-1是1022或0b0111111110,+1是1024 0b10000000000。

在二進制補碼,數量將是0是0b00000000000,-1是0b11111111111,和1是0b00000000001

的使用偏移的屬性,是最大爲數值的可能數目的一半。即對於11比特,範圍是-1023到1024,而不是-1024到1023.

另一個屬性是該數字可以通過比較整數值進行比較。

long l1 = Double.doubleToRawLongBits(d1); 
long l2 = Double.doubleToRawLongBits(d2); 
if (l1 > l2) // like d1 > d2 

唯一的區別是在爲NaN的處理和-0.0的方法Double.compare(雙,雙)採用的是基於此。

+0

謝謝,但你的答案實際上不是我想要的。我想知道,如浮動,爲什麼偏移量不是2 ^(n-1)= 128而是2 ^(n-1) - 1 = 127 – Foredoomed

+0

我只是猜測,但我已經加入了我認爲可能是這個想法。 –