這一章,主要介紹了好多種計算方法。下面,寫一點自己對於有些計算(手寫計算過程)的見解。
- 1.原碼、反碼、補碼
原碼:相信大家都會寫,符號位在前二進制數值在后,湊夠位數即可。
反碼:原碼符號位不變,其他位全部取反。
補碼:反碼末位加一 / 原碼符號位不變,從右往左數第一個1及其右邊的各位不變,其余位全部取反
- 2.IEEE754的轉換
IEEE754標准32/64浮點規格化數形式:X = (-1)S * 1.M * 2E-127(其中,S-階符,M-尾數,E-階碼)
32位的規格化浮點數:SEM00000...(即二進制SEM后面補0,寫夠32位)
以27/64為例:
①化形式:27/64 = + (1.1011)2 * 2-2
②找SEM:S=0,M=1011,E=(125)10=(01111101)2
③寫結果:00111110 11011000 00000000 00000000 = (3ED800)16
- 3.變形補碼計算加減法
變形補碼沒什么稀奇,不過是符號位變成兩位而已(00為正,11為負),它的價值在於可以作溢出判斷(結果00//11表示未溢出,01-上溢(所謂上溢符號位還是0),11-下溢(下溢符號位還是1)),就正常求補碼(符號位double),放在一起加和,做溢出判斷,最后別忘了把補碼再轉換回原碼作為最終結果。
x+y:
以x=11011, y=00011為例:
①求補:[11011]補=0011011, [00011]補=0000011
②加和:011011 + 000011 = 0011110;符號位00,未溢出,故x+y=11110
x-y:(這里把減法化為加法,即 x-y = x+(-y),另外[-y]補 = [y]補 從右往左數第一個1及其右邊的各位不變,其余位全部取反,這次連帶符號位也要取反)
以x=11011, y=-11111為例:
①求補:[11011]補=0011011, [-11111]補=1100001,[-y]補=0011111
②加和:[x]補+[-y]補 = 0011011 + 0011111 = 0111010;符號位01,正溢(上溢);故x-y=+111010
- 4.浮點數加減法(我用的是補碼計算)
這里面涉及的東西比較多,每一步都需要仔細,錯一步結果就錯了。
①求補對階
②尾數求和
③規格化
④舍入處理
⑤溢出判斷
⑥寫結果
例子后面給
