單精度浮點數的二進制表示時 指數爲什麼要加上127的偏移量

單精度浮點數
IEEE 754 標準所定義的單精度浮點數的長度爲 32 位,按位域可劃分爲:符號位、階碼位與尾數位,如下:
31----------------------22---------------------------------------------------------0
| | |
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
| |-------------------| |----------------------------------------------------------|
符號 階碼 尾數符號位取 0 表示正數,取 1 表示負數。
階碼位是 8 位,這裏有一點小門道需要注意,那就是的指數 n 並不能直接當作階碼來處理,需要將其與 127 (0x7f) 相加纔可得到 的階碼錶示。
尾數的位域長度在圖示中是 23 位,但實際上卻是 24 位,這個位是“不可見”的,其值固定爲 1,這也就是說 IEEE 754 標準所定義的浮點數,其有效數字是介於 1 與 2 之間的小數。
可以嘗試寫一下 1.0 這個數的二進制單精度浮點格式,這有助於更好地理解單精度浮點數格式的位域分佈。
1.0 的二進制單精度浮點格式:0 0111 1111 000 0000 0000 0000 0000 0000值得注意的一個問題是:書上說之所以要將指數加上 127 來得到階碼,是爲了簡化浮點數的比較運算,這一點我沒有體會出來。但是通過 127 這個偏移量 (移碼),可以區分出指數的正負。階碼爲 127 時表示指數爲 0;階碼小於 127 時表示負指數;階碼大於 127 時表示正指數。
第二個值得思考的問題是:使用 24 位尾數,大概可以得到 個十進制數字的精度,其中的“半個”數字由 FPU 的好意而產生的一個隨機數字,這個數字通常接近 5 (四捨五入?)。
第三個問題是我經常要碰到的:IEEE 754 標準所定義的單精度浮點數所表示的數的範圍是多少?書上給出的答案是大約爲 或者大約 。這個比較好理解,因爲尾數的最大值是接近 2,而指數的範圍是 [-127, 127],那麼這個範圍就可以表示爲。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章