-
補碼
鎖定
- 中文名
- 補碼
- 外文名
- two's complement
- 所屬領域
- 計算機
- 作 用
- 存儲數值
補碼概念引入
在介紹補碼概念之前,先介紹一下“模”的概念:“模”是指一個計量系統的計數範圍,如過去計量糧食用的鬥、時鐘等。計算機也可以看成一個計量機器,因為計算機的字長是定長的,即存儲和處理的位數是有限的,因此它也有一個計量範圍,即都存在一個“模”。如:時鐘的計量範圍是0~11,模=12。表示n位的計算機計量範圍是
,模=
.“模”實質上是計量器產生“溢出”的量,它的值在計量器上表示不出來,計量器上只能表示出模的餘數。任何有模的計量器,均可化減法為加法運算
[3]
。
就是取反後加1。
假設當前時針指向8點,而準確時間是6點,調整時間可有以下兩種撥法:一種是倒撥2小時,即8-2=6;另一種是順撥10小時,8+10=12+6=6,即8-2=8+10=8+12-2(mod 12).在12為模的系統裏,加10和減2效果是一樣的,因此凡是減2運算,都可以用加10來代替。若用一般公式可表示為:a-b=a-b+mod=a+mod-b。對“模”而言,2和10互為補數。實際上,以12為模的系統中,11和1,8和4,9和3,7和5,6和6都有這個特性,共同的特點是兩者相加等於模。對於計算機,其概念和方法完全一樣。n位計算機,設n=8,所能表示的最大數是11111111,若再加1成100000000(9位),但因只有8位,最高位1自然丟失(相當於丟失一個模)。又回到了 00000000,所以8位二進制系統的模為
。在這樣的系統中減法問題也可以化成加法問題,只需把減數用相應的補數表示就可以了。把補數用到計算機對數的處理上,就是補碼
[3]
。
補碼性質
(1)在補碼錶示中,最高位
(符號位)表示數的正負,在形式上與原碼相同,即 0正 1負。但補碼的符號位是數值的一部分,由補碼定義式計算而得。例如,負小數補碼中
為 1,這個 1是真值
(負)加模 2後產生
[3]
。
(3)負數補碼錶示的範圍比原碼稍寬,多一種數碼組合。對於定點數,若為純小數,表示範圍為:
,若為純整數,表示範圍為:
。
補碼原碼求補碼
求給定數值的補碼分以下兩種情況:
補碼正數
例:+9的補碼是00001001。(備註:這個+9的補碼是用8位2進制來表示的,補碼錶示方式很多,還有16位二進制補碼錶示形式,以及32位二進制補碼錶示形式,64位進制補碼錶示形式等。每一種補碼錶示形式都只能表示有限的數字。)
補碼負數
同一個數字在不同的補碼錶示形式中是不同的。比如-15的補碼,在8位二進制中是11110001,然而在16位二進制補碼錶示中,就是1111111111110001。以下都使用8位2進制來表示。
例:求-5的補碼。
-5對應帶符號位負數5(10000101)→除符號位外所有位取反(11111010)→加 00000001為 (11111011)
所以-5的補碼是11111011。
補碼0的補碼
[+0]補=[+0]反=[+0]原=00000000
[ -0]補=11111111+1=00000000
補碼補碼求原碼
⑴如果補碼的符號位為“0”,表示是一個正數,其原碼就是補碼。
⑵如果補碼的符號位為“1”,表示是一個負數,那麼求給定的這個補碼的補碼就是要求的原碼。
例:已知一個補碼為11111001,則原碼是10000111(-7)。
解:因為符號位為“1”,表示是一個負數,所以該位不變,仍為“1”。
其餘七位1111001取反後為0000110;再加1,所以是10000111。
補碼特點
1. 最高位為符號位,為0表示這個數是正數,為1表示這個數是負數。
2. 對於正數,[X]補=[X]原,即正數的補碼與原碼相同,且能表示的數值範圍也相同。
3. 對於負數,補碼的值等於模減去該數的絕對值,負數的補碼等於該數的反碼加1。
4. 對於零,設n=8,則[+0]補=00000000,[-0]補=00000000,0的表示是唯一的,解決了+0和-0的表示問題。
5. 使用補碼錶示,可以將真值的減法運算變為機器中的加法運算,從而使CPU內部不再需要設計減法器,簡化了CPU的設計。
補碼意義
(4)補碼錶示統一了符號位和數值位,使得符號位可以和數值位一起直接參與運算,這也為後面設計乘法器除法器等運算器件提供了極大的方便。總之,補碼概念的引入和當時運算器設計的背景不無關係,從設計者角度,既要考慮表示的數的類型(小數、整數、實數和複數)、數值範圍和精確度,又要考慮數據存儲和處理所需要的硬件代價。因此,使用補碼來表示機器數並得到廣泛的應用,也就不難理解了。
[3]