補碼(two's complement) 在計算機系統(tǒng)中,數(shù)值一律用補碼來表示和存儲。原因在于,使用補碼,可以將符號位和數(shù)值位統(tǒng)一處理;同時,加法和減法也可以統(tǒng)一處理。此外,補碼與原碼的的相互轉(zhuǎn)換,其運算過程是相同的,不需要額外的硬件電路。
補碼概述
計算機中的符號數(shù)有三種表示方法,即原碼、反碼和補碼。三種表示方法均有符號位和數(shù)值位兩部分,符號位都是用1表示“負”,用0表示“正”,而數(shù)值位,三種表示方法各不相同。
補碼的特性
1、一個整數(shù)(或原碼)與其補數(shù)(或補碼)相加,和為模。
2、對一個整數(shù)的補碼再求補碼,等于該整數(shù)自身。
3、補碼的正零與負零表示方法相同。
模
模的概念可以幫助理解補數(shù)和補碼。
“模”是指一個計量系統(tǒng)的計數(shù)范圍。如時鐘等。計算機也可以看成一個計量機器,它也有一個計量范圍,即都存在一個“?!薄@纾?br>
時鐘的計量范圍是0~11,模=12。表示n位的計算機計量范圍是0~2^(n)-1,模=2^(n)。
“?!睂嵸|(zhì)上是計量器產(chǎn)生“溢出”的量,它的值在計量器上表示不出來,計量器上只能表示出模的余數(shù)。任何有模的計量器,均可化減法為加法運算。
例如:假設當前時針指向10點,而準確時間是6點,調(diào)整時間可有以下兩種撥法:一種是倒撥4小時,即:10-4=6;另一種是順撥8小時:10+8=12+6=6
在以12模的系統(tǒng)中,加8和減4效果是一樣的,因此凡是減4運算,都可以用加8來代替。對“模”而言,8和4互為補數(shù)。實際上以12模的系統(tǒng)中,11和1,10和2,9和3,7和5,6和6都有這個特性。共同的特點是兩者相加等于模。
對于計算機,其概念和方法完全一樣。n位計算機,設n=8, 所能表示的最大數(shù)是11111111,若再加1稱為100000000(9位),但因只有8位,最高位1自然丟失。又回了00000000,所以8位二進制系統(tǒng)的模為2^8。在這樣的系統(tǒng)中減法問題也可以化成加法問題,只需把減數(shù)用相應的補數(shù)表示就可以了。把補數(shù)用到計算機對數(shù)的處理上,就是補碼。
另外兩個概念:
一的補碼(one's complement) 指的是正數(shù)=原碼,負數(shù)=反碼
二的補碼(two's complement) 指的就是通常所指的補碼。
整數(shù)補碼求法
求給定數(shù)值的補碼分以下兩種情況:
正數(shù)的補碼
正整數(shù)的補碼與原碼相同。