《深入理解計算機系統(原書第2版)》第2章信息的表示和處理
練習題2.52 考慮下列基于IEEE浮點格式的7位浮點表示。兩個格式都沒有符號位——它們只能表示非負的數字。
1.格式A
有k=3個階碼位。階碼的偏置值是3。
有n=4個小數位。
2.格式B
有k=4個階碼位。階碼的偏置值是7。
有n=3個小數位。
下面給出了一些格式A表示的位模式,你的任務是將它們轉換成格式B中最接近的值。如果需要,請使用舍入到偶數的舍入原則。另外,給出由格式A和格式B表示的位模式對應的數字的值。給出整數(例如17)或者小數(例如17/64)。
image.png
101 1110的轉換
位101 1110對應的數字的值為15/2,這個很簡單,就不贅述了。這里講一下怎么將15/2轉為格式B。
在這道習題之前,P74頁已經有一個將整數值轉換成浮點形式的實例了:
在圖2-14中我們看到12 345具有二進制表示[11000000111001]。通過將二進制小數點左移13位,我們創建這個數的一個規格化表示,得到12345 = 1.10000001110012×2^13。為了用IEEE單精度形式來編碼,我們丟棄開頭的1,并且在末尾增加10個0,來構造小數字段,得到二進制表示 [10000001110010000000000]。為了構造階碼字段,我們用13加上偏置量127,得到140,其二進制表示為[10001100]。加上符號位0,我們就得到二進制的浮點表示[01000110010000001110010000000000]。
參考以上轉換流程,對101 1110處理如下:
- 15具有二進制表示[1111]
- 15/2的二進制表示[111.1]
- 將二進制小數點左移2位,得到1.111x2^2
- 丟棄開頭的1,構造小數字段,得到二進制表示[111]
- 構造階碼字段,用2加上偏置量7,得到9,其二進制表示為[1001]
- 最后得到格式B的浮點表示:[1001 111]
010 1001的轉換
010 1001的值為25/32,同樣的流程處理:
- 25具有二進制表示[11001]
- 25/32的二進制表示1.1001x2^-1
- 由于格式B只能表示3個小數位,舍入到偶數得到1.100x2^-1
- 丟棄開頭的1,構造小數字段,得到二進制表示[100]
- 構造階碼字段,用-1加上偏置量7,得到6,其二進制表示為[0110]
- 最后得到格式B的浮點表示:[0110 100]
110 1111的轉換
110 1111的值為31/2,流程如下:
- 31具有二進制表示[11111]
- 31/2的二進制表示1.1111x2^3
- 由于格式B只能表示3個小數位,1.11110做舍入到偶數為1.000x2
- 31/2的舍入后表示為1.000x2^4
- 丟棄開頭的1,構造小數字段,得到二進制表示[000]
- 構造階碼字段,用4加上偏置量7,得到11,其二進制表示為[1011]
- 最后得到格式B的浮點表示:[1011 000]
000 0001的轉換
000 0001的值為1/64
- 1/64具有二進制表示1.000x2^-6
- 丟棄開頭的1,構造小數字段,得到二進制表示[000]
- 構造階碼字段,用-6加上偏置量7,得到1,其二進制表示為[0001]
- 最后得到格式B的浮點表示:[0001 000]