加减法运算及其溢出处理
一、加减法的溢出处理
1.溢出的定义
◆当运算结果超出机器数所能表示的范围时。
◆ 与最高位产生的进位区别:自动丢弃。
◆ 什么情况下会产生溢出?
➢ 两个异号数相加或两个同号数相减(不会溢出)
➢ 两个同号数相加或两个异号数相减(可能溢出)
2.溢出的判别方法
(3)fA=0,fB=0,fS=1≠0,故溢出
(4)fA=1,fB=1,fS=0≠1,故溢出
从末尾往前推考虑数值最高位是否进位,符号位是否进位。
(1)fA=0,fB=0,Cf=0(A,B直接运算产生的进位)C=0(数值最高位产生的进位)
(2)fA=1,fB=1,Cf=1(A,B直接运算产生的进位)C=1(数值最高位产生的进位)
(3)fA=0,fB=0,Cf=0(A,B直接运算产生的进位)C=1(数值最高位产生的进位)溢出
(4)fA=1,fB=1,Cf=1(A,B直接运算产生的进位)C=0(数值最高位产生的进位)溢出
(5)fA=0,fB=1,Cf=1(A,B直接运算产生的进位)C=1(数值最高位产生的进位)
(6)fA=0,fB=0,Cf=0(A,B直接运算产生的进位)C=0(数值最高位产生的进位)
例题:
较为推荐第三种方式判断溢出,形式简单记忆方便。三种判别方法只需掌握一种即可。
例题:
二、补充知识
1.移位
推荐补充文章:移位运算用法的总结
1、算数移位 无论正数还是负数,移位后其符号位均不变,且移位后都相当于对真值补0。
2、逻辑移位 将操作数视为无符号数,左移时,低位添0;右移时,高位添0。
补0是相对真值补0,右移是补码右移。
2.有符号数和无符号数之间的转换
符号位上的值直接变成数值
3.不同字长数整数之间的转换
补0的原则是要尽量不改变原有数值,有符号的默认最高位为符号位,符号位要保留单独处理。
4.定点数表示法
我们知道+111和+0.111的原码同为0111,这是因为约定的小数点位置不同,整数的原码小数点约定在末尾,纯小数的原码小数点约定在数值最前面,这样通过约定小数点的位置来表示数的 方法就称为定点数表示法,约定小数点位置实际上就是约定编码中每一位的权重。(对于纯小数来说,小数点在符号位后面,但它不显示也不占位;对于整数来说,小数点就确定在末尾,同样是不显示也不占位)