计算机补码加减溢出及原码、反码、补码、移码关系

原码不能直接参加运算,可能会出错。例如在数学上,1 + (-1) = 0, 而在二进制中 0000 0001 + 1000 0001 = 1000 0010,换算成十进制为130 ≠ 0 。显然是错的。
所以计算机中数值一律用补码来表示。


计算机补码加减及溢出

想要了解掌握补码,应先知道其运算规则:
  1. 【X+Y】 = 【X】 +【Y】

  2. 【X-Y】 = 【X】 +【-Y】

例一:
用补码求 【 X - Y 】
若:【X】 = 0010 0101
  【-Y】 = 1100 1101
  【X-Y】 = 【X】 +【-Y】 = 0010 0101 + 1100 1101 = 1111 0010
另外提两点,结果得符号位 0 为正数,【X-Y】 =【X-Y】原码 ,符号位为 1 为负数,【【X-Y】 = 【X-Y】原码
本例中【X-Y】 = 1111 0010 ,符号位为 1 为负数,所以【【X-Y】 =【X-Y】原码

上述补码运算结果是正确的,但有时在补码运算过程中也会出现错误的计算。

例二:
设 X = +100 , Y = +50 ,用补码运算求解X+
Y 。
【X】 = 0110 0100      【Y】 = 0011 0010
【-X】 = 1001 1100     【-Y】 = 1100 1110

【X+Y】 = 0110 0100 + 0011 0010 = 1001 0110
【X+Y】原码 = 【【X+Y】 = 1110 1010
X+Y = -(0110 1010)= -106 ≠ (+100) + (+50)

溢出的判别

计算机中判别溢出的方法通常采用双高位判别法。双高位判别法利用符号位(K n-1 位)及最高数值位(K n-2 位)的进位情况来判断是否发生了溢出。为此,需引进两个符号::Cs 和 Cp.

Cs:若符号位发生进位,则Cs = 1; 否则Cs = 0
Cp:若最高数值位发生进位,则Cp = 1;否则Cp = 0

● 当两个正数补码相加时,若数值部分之和大于2n-1,则数值部分必有进位Cp= 1;而符号位却无进位Cs = 0。这时CsCp的状态为 “ 01 ” 发生正溢出。
● 当两个负数补码相加时,若数值部分绝对值之和大于2 n-1 ,则数值部分补码之和必小于2 n-1, Cp = 0;而符号位肯定有进位Cs = 1,这时CsCp的状态为 “10“”, 发生负溢出。
● 当不发生溢出时,Cs和Cp的状态是相同的,即Cs Cp的状态为 “00” 或 “11” 。
例三:

① 1001 0010   (-110)    ②   1110 1100	(-20)
+ 1010 0100   (-92)	    + 1110 0010		(-30)
——————————————             ——————————————————  
1 0011 0110   (+54)    	1 1100 1110		(-50)
Cs = 1,Cp = 0,  ==负溢出   Cs = 1, Cp = 1,==无溢出


      

      综上所述,对计算机而言,补码的引入使带符号数的运算都按加法处理。如果Cs和Cp的值相等,则表示运算结果正确,没有溢出。如果Cs和Cp的值不等,则表示运算结果不正确,发生了溢出现象。

你可能感兴趣的:(计算机相关知识)