现实中的科学计数乘除
计算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的格式原因)