1、补码的运算规则与溢出判别 1. 补码的运算规则 补码的运算规则如下:1)X+Y补X补Y补该运算规则说明:任何两个数相加,无论其正负号如何,只要对它们各自的补码进行加法运算,就可得到正确的结果,该结果是补码形式。2)X-Y补X补-Y补该运算规则说明:任意两个数相减,只要对减数连同“-”号求补,就变成被减数补与-减数补相加,该结果是补码形式。,3)X补补X原对于运算产生的补码结果,若要转换为原码表示,则正数的结果X补X原;负数结果,只要对该补结果再进行一次求补运算,就可得到负数的原码结果。 例2: 用补码求X+Y。 解: 若X补00100101,Y补00110011,可得X+Y补X补+Y补0010
2、0101+0011001101011000 由于符号位为0是正数,所以X+Y原X+Y补01011000则 X+Y(01011000)288,例3: 用补码求X-Y。 解: 若-Y补11001101,可得X-Y补X补+-Y补00100101+1100110111110010 由于符号位为1是负数,所以X-Y原X-Y补补10001110 则 X-Y-(00001110)2-14 例4: 用补码求Y-X。 解: 若-X补11011011,可得Y-X补Y补+-X补 00110011+11011011100001110 (模28自然丢失) 则 Y-X(00001110)2+14,例5: 用补码求(-X)
3、+(-Y)。 解: (-X)+(-Y)补-X补+-Y补 11011011+11001101110101000 (模28自然丢失)(-X)+(-Y)原(-X)+(-Y)补补11011000则(-X)+(-Y)-(01011000)2-88上述运算结果是正确的,但有时在补码运算中可能会出现错误的结果,请看下面例子。 例6: 设X+100,Y+50,用补码运算求X+Y,(-X)+(-Y)。 解: X补01100100Y补00110010-X补10011100-Y补11001110 X+Y补X补+Y补01100100+0011001010010110X+Y原X+Y补补11101010X+Y-(0110
4、1010)2-106 而-X补+-Y补10011100+1100111001101010 -X补+-Y补原(01101010)201101010 (-X)+(-Y)+(01101010)+106,2. 溢出的判别计算机中判别溢出的方法通常采用双高位判别法。双高位判别法利用符号位(K n-1位)及最高数值位(K n-2位)的进位情况来判断是否发生了溢出。为此,需引进两个符号:CS和CP。CS:若符号位发生进位,则CS1;否则CS0。CP:若最高数值位发生进位,则CP1;否则CP0当两个正数补码相加时,若数值部分之和大于2n-1,则数值部分必有进位CP1;而符号位却无进位CS0。这时CSCP的状态
5、为“01”,发生正溢出。当两个负数补码相加时,若数值部分绝对值之和大于2n-1,则数值部分补码之和必小于2n-1,CP0;而符号位肯定有进位CS1,这时CSCP的状态为“10”,发生负溢出。当不发生溢出时,CS和CP的状态是相同的,即CSCP的状态为“00”或“11”。,例 7:01011001 (+89) 10010010 (-110)01101100 (+108) 10100100 (-92)+)011110000 (进位) +)1 00000000 (进位)011000101 (-59) 1 00110110 (+54) CS0,CP1,正溢出 CS1,CP0,负溢出,例8: 00110
6、010 (+50) 11101100 (-20)01000110 (+70) 11100010 (-30) +)0 00001100 (进位) +)1 11000000 (进位)0 01111000(+120) 1 11001110(-50) CS0,CP0,无溢出 CS1,CP1,无溢出,例9: 01010101 (+85) 10111100 (-68)11011101 (-35) 00011101 (+29)+)1 10111010 (进位) +)0 01111000 (进位)1 00110010 (+50) 0 11011001(-39) CS1,CP1,无溢出 CS0,CP0,无溢出,综上所述,对计算机而言,补码的引入使带符号数的运算都按加法处理。如果C和C的值相等,则表示运算结果正确,没有溢出,运算结果的正与负由符号位决定(如例8、例9);如果CS和CP的值不等,则表示运算结果不正确,发生了溢出现象(如例7)。 在计算机中,常用“异或”电路来判别有无溢出发生,即CSCP1表示有溢出发生,否则无溢出发生。,