補碼與反碼
補碼 與反碼
計算機中一般採用補碼的形式來簡化減法運算和邏輯運算。在電路功能實現是,簡化減法運算可以減少多餘的電路,降低了複雜度。每個進位制系統都有兩種型別的補碼:基數補碼和基數減 1 補碼 ( 基數反碼 ) 。
1. 基數反碼
定義:對於一個數字:有 n 位,且進位制是 r ,的數字是 N ,其反碼的定義是( r n -1 ) -N ;例如對於 546700 的反碼的運算就是
10 6 -1 =999999 ;
999999-546700=453299 ;
二進位制的反碼 :對於 10001
R n -1 即 10000-1=1111
1111-10001=01110=1110
對於任意 n 位,相當於 n 個 1-N ; 1-1=0 ; 1-0=1 所以相當於 求反操作。 1 改為 0 , 0 改為 1 。
- 基數補碼
定義:對於一個數字:有 n 位,且進位制是 r ,的數字是 N ,其反碼的定義是 r n -N
對於一個十進位制便就是 10 n -N
012398 的補碼就是 100000-012398=987602
二進位制的補碼:
對於 1101100 的補碼就是 0010100
快捷方法: 不改變最低位的 0 和第一齣現的 1
- 補碼的減法
利用借位概念的直接減法在小學就教過了。這種方法是,當被減數比減數小時高位借一個 1 。人們用紙和筆來進行減法運算時,這種方法確實很好,而要用硬體來實運算時,就較為複雜了,不如補碼的演算法。
兩個有 n 個數字的進位制的無符號數減法 M-N 可按以下步驟來進行:
1 )將被減數 M 與減數 N 的補碼相加,即
M+(r n -N)=M-N+r n
2)If ( M>=N )加起來的結果本身就會產生 r n 的進位,所以可以要減去 r n 的進位,及忽略左邊第一位
3)else 不會產生進位 r n - ( N-M )也就是 N-M 的基數補碼,所以在結果前加負號。
- 利用二進位制反碼來進行無符號減法
前面以及知道,反碼比補碼少 1 ,因此,將被減數與減數的補碼的相加產生的和,只有當末端進位時,該數比正確結果少 1 ,既不與需要加 1 了。