計算機補碼加減溢出及原碼、反碼、補碼、移碼關係

原碼不能直接參加運算,可能會出錯。例如在數學上,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的值不等,則表示運算結果不正確,發生了溢出現象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章