1、补码加减法运算,1. 补码加减运算公式,(1) 加法,(2) 减法,整数,A补 + B补,= A+B补(mod 2n+1),小数,A补 + B补,= A+B补(mod 2),整数,A B补,= A+(B )补,= A补 + B补,(mod 2n+1),小数,A B补,= A+(B )补,(mod 2),连同符号位一起相加,符号位产生的进位自然丢掉,= A补 + B补,介绍一下补码加减、法规则: 1:x+y补=x补+y补 2:x-y补=x补+-y补 3:结果为补码 4:符号与数值一样参加运算。,2. 举例,解:,A补,B补,A补 + B补,+,= 0 . 1 0 1 1,= 1 . 1 0 1
2、1,= 1 0 . 0 1 1 0,= A + B补,验证,0.1011, 0.0101,0.0110, A + B = 0 . 0 1 1 0,A补,B补,A补 + B补,+,= 1 0 1 1 1,= 1 1 0 1 1,= 1 1 0 0 1 0,= A + B补,验证, 1001, 1110,解:, A + B = 1110, 1110,3. 补码加减法的硬件配置,反码加减法运算,介绍一下反码加减、法规则: 1:参与运算的数全变为反码 2:相加有进位加结果上 3: 结果为反码 4:符号与数值一样参加运算。,2. 举例,解:,A,B,A+ B,+,= 0 0 0 0 1,= 1 1 0
3、0 0,= 1 1 0 0 1, A + B = 1 1 0 0 1,A,B,A + B,+,= 0 1 1 0 1,= 1 1 1 0 0,= 1 0 1 0 0 1,A + B=,01010,解:,进位,3. 反码加减法的硬件配置,1. 移码表示法 定义,x 为真值,n 为 整数的位数,移码在数轴上的表示,如,x = 10100,x移 = 25 + 10100,x = 10100,x移 = 25 10100,= 110100,= 001100,介绍一下移码加减、法规则: 1:x+y移=x移+y补 2:x-y移=x移+-y补 3:结果为移码 4:符号与数值一样参加运算。,移码加减法运算,2.
4、 举例,解:,A移,B补,A移 + B补,+,= 1 1 0 1 1,= 1 0 1 0 1,= 1 0 0 0 0,解:,A移,-B补,A移 + -B补,+,= 1 1 0 1 1,= 1 0 1 0 1,= 1 0 0 0 0,3. 移码加减法的硬件配置,3.2.2 加减法运算的溢出处理(补码运算)当运算结果超出机器数所能表示的范围时,称为溢出。显然,两个异号数相加或两个同号数相减,其结果是不会溢出的。仅当两个同号数相加或者两个异号数相减时,才有可能发生溢出的情况,一旦溢出,运算结果就不正确了,因此必须将溢出的情况检查出来。 今以4位二进制补码正整数加法运算为例说明如下:,例3.11 9+
5、5=14 (-9)+(-5)= -14 0 1 0 0 1 1 0 1 1 1 + 0 0 1 0 1 + 1 1 0 1 10 1 1 1 0 1 1 0 0 1 0 12+7=19(溢出) 0 1 1 0 0+ 0 0 1 1 11 0 0 1 1, (-12)+(-7)=-19(溢出) 14-1=131 0 1 0 0 0 1 1 1 0 1 1 0 0 1 + 1 1 1 1 1 1 0 1 1 0 1 1 0 1 1 0 1 -14+1= -131 0 0 1 0+ 0 0 0 0 1 1 0 0 1 1在上例中,、和得出正确结果,和为溢出。,今以fA,fB表示两操作数(A、B)的符
6、号位,fS为结果的符号位。符号位fA、fB直接参与运算,它所产生的进位以Cf表示。在以2n+1为模的运算中符号位有进位,并不一定表示溢出,,在例3.11中的和即是这种情况。假如我们用C来表示数值最高位产生的进位,那么C=1也不一定表示溢出,例3.11中的和仍属这种情况。究竟如何判断溢出,实现时有多种方法可供选择,采用其中一种方法即可,今将判别溢出的几种方法介绍如下:,(1) 当符号相同的两数相加时,如果结果的符号与加数(或被加数)不相同,则为溢出例3.11中和。即溢出条件=fAfBfS+fAfBfS。在计算机中判溢出的逻辑电路如图3.1所示,图3.1(a)和图3.1(b)是两种不同逻辑电路,但
7、其结果是相同的。,(2) 当任意符号两数相加时,如果C=Cf,运算结果正确,其中C为数值最高位的进位,Cf为符号位的进位。如果CCf,则为溢出,所以溢出条件=C Cf。例3.11中的和即为这种情况。其逻辑电路见图3.2。,(3) 采用双符号位fS1fS2。正数的双符号位为00,负数的双符号位为11。符号位参与运算,当结果的两个符号位fS1和fS2不相同时,为溢出。所以溢出条件=fS1fS2,或者溢出条件=fS1fS2+fS1fS2。其逻辑电路如图3.3所示。,例3.12 9+5=14 12+7=190 0 1 0 0 1 0 0 1 1 0 0 + 0 0 0 1 0 1 + 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 0 1 1C=Cf=0 不溢出, C=1,Cf=0溢出, 或fS1=fS2 不溢出 或fS1fS2溢出,运算结果的符号位为fS1(无论溢出与否)。 采用多符号位的补码又叫“变形补码”。如果采用双符号位,当数为小数时,模m=4;当数为整数时,模m=2n+2。其中n为数值部分的位数。一般运算时用双符号位,存储时仅保留一个符号位。因为在正常情况下,两个符号位保持一致,而发生溢出情况时,一般要产生出错信号,由CPU执行纠错程序进行处理,情况严重时将停机。,