寫個學習心得鞏固下前段時間學的機組的知識吧。
一 .非規格化浮點數定義:小數點的位置根據需要而變動
浮點數個人覺得完全可以當做科學計數法來記,尾數爲小數部分(如0.11);階碼部分爲階數,公式可表示爲:N=M*r^E
其中,r爲階碼的底,與尾數的基數相同,一般來講做題的話題目會明確給出。
E,M爲帶符號的定點數,E爲階碼,M爲尾數。(大多數計算機中,尾數爲純小數,常用原碼或補碼錶示;階碼爲整數,常用移碼或補碼錶示)
浮點數的格式如上圖,尾數與階碼均用補碼錶示。E+M=機器的位數(感覺還是放個圖比較好理解,word手擼圖,莫名卑微哈哈,寫完這篇去看markdown了)
1.最大正數(二進制)
當Es=0,Ms=0時,階碼尾數均爲正數;當階碼與尾數的數值(不含符號位)全爲1時,該浮點數即爲最大正數
2.最小正數
當Es=1且階碼各位爲1,Ms=0且尾數最後一位不爲1時,階數爲負,尾數爲正,即得到最小正數
3.絕對值最大負數(最小負數)
當Es=0,階碼各位爲1,Ms=1,尾數各位爲1時,得到絕對值最大負數(最小負數)
4.絕對值最小負數(最大負數)
當Es=1且階碼各位爲0,Ms=1且尾數除最後一位外其餘各位均爲0的時候,得到絕對值最小負數(最大負數)
二 .IEEE754標準浮點數
IEEE754標準浮點數的格式如圖所示
三 .規格化浮點數
規格化浮點數的尾數M的絕對值應爲:|M|<1
(當M<1時,尾數爲0.1XX…形式;當-1M<-時,尾數爲1.0XX…形式)
規格化操作:通過調整非規格化浮點數的尾數和階碼的大小,使非零浮點數在尾數的最高位數位上保證是有效值(可對比科學計數法,如100.1用科學計數法應表示爲)。將非規格化浮點數轉化爲規格化浮點數,即轉化爲符合IEEE754標準的浮點數。
例:轉換爲短浮點數格式
①先將十進制轉換爲二進制數:
=
②將該二進制數規格化:
1100100.01=1.10010001*(進一步轉換爲)//規格化操作到這裏就算完成了 ,但浮點數代碼未完成
③計算出階碼的移碼(偏置值+階碼真值):
進一步轉換爲,該110即爲偏置值。
1111111+110=10000101
④以短浮點數形式存儲該數
符號位=0
階碼=10000101
尾數(先前規格化操作中求得的尾數後補零,直到位數達到規定的格式位數)=10010001000000000000000
短浮點數代碼:0;1000101;10010001000000000000000
同理,可求得短浮點數格式轉換爲其他進制的數
例:把短浮點數C1C90000H轉換成十進制數
①先轉換爲二進制數形式
C1C90000H=11000001110010010000000000000000
分離符號位、階碼。尾數
符號位=1
階碼=10000011
尾數=10010010000000000000000
②計算偏置值(移碼-階碼真值)
10000011-1111111=100
③以規格化二進制數形式表示出
1.1001001*
④轉換爲非規格化二進制數
11001.001
⑤轉換成十進制(加符號)
=-
故該浮點數爲-25.125
PS:IEEE754短浮點數規格化的數值爲:
v=*(1.f)
S代表符號位,0正1負;E爲用移碼錶示的階碼;f是尾數的小數部分