為什么階碼的偏移量選擇用127而不用128?


在IEEE754標准中,為什么階碼的偏移量選擇用127而不用128?

2011-04-01 21:53 maxlwc | 分類:匯編語言 | 瀏覽1703次
本人清楚IEEE754標准是使用127作為偏移量,但是不明白他為什么選127。原來移碼中,正常8位移碼,通常偏移量是128。IEEE754為何不選用128作為偏移量。選127比選128有何優勢?希望有這方面的牛人能一解我的困惑。

我來幫他解答

提問者采納
檢舉| 2011-04-04 01:12
因為ieee754的尾數部分標准化后首位的1會隱藏掉。
比如8是2的3次,不算隱藏為位的話,階碼是3的移碼131,但有隱藏位后,尾數部分全部左移一位,階碼減1變成130,並且把尾數的首位數字1隱去。為方便記憶直接稱為127移碼。
追問
謝謝,不過你的這個理解是錯的:你的觀點是因為尾數的隱藏位造成了指數偏移量不是128而是127。換句話說假如使用128作為偏移量,不使用隱藏位所算出的階碼值應該等於使用127作為偏移量,使用隱藏位所算出的階碼值。現在我就來模擬計算下(n為數符,e為指數,s為尾數):(1)偏移127,首先將8轉化為n=0,e=3,s=1.0,然后再將3+127=130。(2)偏移128,首先將8轉化為n=0,e=4,s=0.1,然后再將4+128=132。由計算可見兩者不相等。
回答
我來打個比方
如果將e=3看做函數的參數,移碼130看做函數的返回值那你計算出來的132是什么呢
函數如下
int f(int e)
{
e=e+128; // 變為移碼
e=e-1; //減小1
return e;
}
3和4作為輸入返回值是130 ,和131,你求到中間步驟當然結果不對,人們就是為了簡單才把兩個步驟合起來的,你要還原過程就把步驟做全。
追問
可能是我沒說清楚,我來按照你的思路模擬一遍:(1)8=0.1乘以2的4次方 (2)將4以128為偏移量求階碼,階碼求出為132 ,注意此時尾數為0.1(3)然后將尾數左移一位,尾數變為1.0,此時階碼減去1,即132-1=131。發現沒有,算出來的階碼最終結果是131而不是130,可見並不是因為隱藏位才將128的偏移量改為127。我原來對這個問題的理解和你是一樣的,所以對這個思路我是比較清楚錯在哪里的。你再好好考慮下,非常感謝你的回答。
回答
標准化的表示法是唯一的,即隱藏位必須是1。
8=0.1乘以2的4次方,尾數部分要移動兩次,才是標准化寫法。
8的標准化后階碼130,尾數部分包含隱藏位的前4位是1000
132對應的尾數前4位是0010。是不是和你想的不同?
因為只存在標准化小數到機器碼的一個公式,小數只有變成1.s 2^e
這種形式才能使用公式。非標准化小數不能套用這個公式
追問
我很認真看了你的回答。8=0.1乘以2的4次方,此時尾數部分隱藏位為0;在尾數部分左移一位以后8=1.0乘以2的3次方,此時尾數部分隱藏位為1。不知道你為什么會理解成“尾數部分要移動兩次”。
而且,最關鍵的一點,使不使用隱藏位只會影響指數的實際值(比如,此處我們談論的2的3次方或者是4次方),而不會影響指數的偏移量,偏移量只是移碼的一種計算手段。還有我如果追問超過3條要消耗財富值了。我們可以加好友探討下這個問題。
回答
尾數部分包含隱藏位的話,小數點在第二位之后,10.00 130 和00.10 132
請實際算一下。
另一個問題的話,我問過別人,答案是尾數左移和階碼減一是電路級的一個過程,無法分開
我的網速,魔幻了一天了,居然是負的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM