現實中的科學計數乘除
計算1.234×102+5.678×101=?
- 1.234×5.678=7.006652
- 2+1=3
- 7.006652×103=7.01×103
我們總結下來就是尾數相乘除,指數相加減。
機器中的過程
求階
由於階碼是用移碼錶示的,所以求階的過程就是求移碼的和或差。
移碼運算參考
使用以下公式進行階碼的加減,這裏的偏置常數是(2n-1-1)
- [A+B]移=[A]移+[B]移−(2n−1−1)
- [A−B]移=[A]移−[B]移+(2n−1−1)
示例1:(-1)+(-2)
將階碼用移碼錶示:(加偏置常數127)
(−1)10+(127)10=(126)移=(01111110)2
(−2)10+(127)10=(125)移=(01111101)2
(127)10=(01111111)補
(−127)10=(10000001)補
求階:(階碼相加,減127)
01111110+01111101+10000001=01111100
結果:
[01111100]移=124
124−127=−3(減去偏置常數)
示例2:(-1)-(-2)
因爲是減-2,所以求-2的變補碼:
(01111101)變補=10000011
求階:(階碼相減,加127)
01111110+10000011+01111111=10000000
結果:
[10000000]移=128
128−127=1(減去偏置常數)
尾數乘除
由於尾數是用原碼錶示的,所以需要知道原碼的乘除運算:
原碼乘參考
原碼除參考
結果規格化(同浮點數加減)
- 當尾數高位爲0需左歸:每左移一次,階碼減一,直到MSB(最高有效位)爲1。(小數點右移,指數變小)
- 當尾數最高位有進位,需右歸:每右移一次,階碼加一,直到MSB爲1。
- 每次階碼變化,都需要判斷階碼是否上溢或下溢。階碼上溢時異常處理,下溢時結果爲0。
上下溢即尾數和階碼的特殊情況
階碼溢出判斷
上溢表示階碼值過大,下溢表示階碼值過小。
- 左規時(尾數左移,階碼減1)
先判斷階碼是否全0,若是,則階碼下溢。否則,階碼減1後判斷是否全爲0,若是則階碼下溢。
- 右規時(尾數右移,階碼加1)
先判斷階碼是否全1,若是,則階碼上溢。否則,階碼加1後判斷是否全爲1,若是則階碼上溢。
4種特殊情況的溢出
設Ex,Ey是兩位階碼,Eb是Ex與Ey運算的結果:
- Eb全爲1則上溢,Eb全爲0則下溢。
- Eb=Ex+Ey
- 若Ex,Ey最高位都是1,且Eb的最高位是0,則階碼上溢。(
正數加正數是負數)
- 若Ex,Ey最高位都是0,且Eb的最高位是1,則階碼下溢。(
負數加負數是正數)
- Eb=Ex-Ey
- 若Ex最高位是1,Ey最高位是0,且Eb的最高位是0,則階碼上溢。(
正數減負數是負數)
- 若Ex最高位是0,Ey最高位是1,且Eb的最高位是1,則階碼下溢。(
負數減正數是正數)
舍入(同浮點數加減)
浮點數加減的舍入
尾數代表的實際值是0,則將階碼置0。(因爲浮點數表示0的格式原因)