
一個數字的二補數就是將該數字作位元反相運算(即一補數),再將結果加1,即為該數字的二補數。在二補數系統中,一個負數就是用其對應正數的二補數來表示。二補數系統的最大優點是可以在加法或減法處理中,不需因為數字的正負而使用不同的計算方式。只要一種加法電路就可以處理各種有號數加法,而且減法可以用一個數加上另一個數的二補數來表示,因此只要有加法電路及二補數電路即可完成各種有號數加法及減法,在電路設計上相當方便。
另外,二補數系統的0隻有一個表示方式,這點和一補數系統不同(在一補數系統中,0有二種表示方式),因此在判斷數字是否為0時,只較比對一個不同的條件即可。右側的表是在一些8位元二補數系統的整數。
目錄
1數字表示方式
1.1說明
1.2計算二補數
1.3特別的數字
1.4其他計算二補數的方法
1.5符號延展
2運算
2.1加法
2.2減法
2.3乘法
數字表示方式
說明
二補數十進位
01117
01106
......
00102
00011
00000
1111−1
1110−2
......
1001−7
1000−8
以下用4位元的二補數數字來說明二補數系統的數字表示方式。
在表示正數和零時,二補數數字和一般二進位一樣,唯一的不同是在二補數系統中,正數的最高位元恆為0,因此4位元的二補數正數,最大數字為0111(7)。
二補數數字的負數,最高位元恆為1,4位元二補數的數字中,最接近0的負數為1111(-1),以此類推,因此絕對值最大的負數是1000(8)。
以上的表示方式在電腦處理時格外方便,以下用以下的例子說明:
0011(3)+1111(-1)--------------10010
結果10010似乎是錯的,因為已經超過四個位元,不過若忽略掉(從左數起的)第5個位元,結果是0010(2),和我們計算的結果一樣。而且若可以將二進位的0001(1)變號為1111(-1),以上的式子也可以計算減法:3-1=2。
在n位元的二補數加減法中,忽略第n+1個位元的作法在各種有號數加法下都適用(不過在判斷是否溢位(overflow)時,仍然會用到第n+1個位元)。因此在二補數的系統,加法電路就可以處理有負數的加法,不需另外處理減法的電路。而且,只要有電路負責數字的變號(例如將1變換為-1),也可以用加法電路來處理減法。而數字的變號就用計算數字的二補數來完成。
在一般n位元的二進位數字中,最高有效位元(MSB)第n位元代表的數字為 2n−1。不過,在n位元的二補數系統中,最高有效位元(MSB)第n位元表示符號位元,若符號位元為0,數字為正數或0,若符號位元為1,數字為負數。以下是n位元的二補數系統中,幾個特別的數字: