計算機 - 存儲數值 - 補碼


計算機 - 存儲數值 - 補碼 (two's complement representation)

計算機中的有符號數有三種表示方法,即原碼、反碼和補碼。三種表示方法均有符號位和數值位兩部分,符號位都是用0表示“正”,用1表示“負”,而數值位,三種表示方法各不相同 。

在計算機系統中,數值一律用補碼來表示和存儲。原因在於,使用補碼,可以將符號位和數值域統一處理;同時,加法和減法也可以統一處理 。

1、概念引入

在介紹補碼概念之前,先介紹一下“模”的概念:“模”是指一個計量系統的計數范圍,如過去計量糧食用的斗、時鍾等。計算機也可以看成一個計量機器,因為計算機的字長是定長的,即存儲和處理的位數是有限的,因此它也有一個計量范圍,即都存在一個“模”。如:時鍾的計量范圍是0~11,模=12。表示n位的計算機計量范圍是,模=.“模”實質上是計量器產生“溢出”的量,它的值在計量器上表示不出來,計量器上只能表示出模的余數。任何有模的計量器,均可化減法為加法運算  。
就是取反后加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位二進制系統的模為。在這樣的系統中減法問題也可以化成加法問題,只需把減數用相應的補數表示就可以了。把補數用到計算機對數的處理上,就是補碼  。

2、性質

以補碼定義式為基礎,沿數軸列出典型的真值、原碼與補碼表示,可清楚了解補碼的有關性質 。
(1)在補碼表示中,最高位(符號位)表示數的正負,在形式上與原碼相同,即 0正 1負。但補碼的符號位是數值的一部分,由補碼定義式計算而得。例如,負小數補碼中為 1,這個 1是真值(負)加模 2后產生  。
真值,原碼和補碼的關系

(2)在補碼表示中,數 0只有一種表示,[+0]補 =[-0]補 =0.000……0 [3] .
(3)負數補碼表示的范圍比原碼稍寬,多一種數碼組合。對於定點數,若為純小數,表示范圍為:,若為純整數,表示范圍為:。

3、原碼求補碼

求給定數值的補碼分以下兩種情況:
3.1 正數
正整數的補碼是其二進制表示,與原碼相同  。
例:+9的補碼是00001001。(備注:這個+9的補碼是用8位2進制來表示的,補碼表示方式很多,還有16位二進制補碼表示形式,以及32位二進制補碼表示形式,64位進制補碼表示形式等。每一種補碼表示形式都只能表示有限的數字。)
3.2 負數
求負整數的補碼,將其原碼除符號位外的所有位取反(0變1,1變0,符號位為1不變)后加1 [4] 。
同一個數字在不同的補碼表示形式中是不同的。比如-15的補碼,在8位二進制中是11110001,然而在16位二進制補碼表示中,就是1111111111110001。以下都使用8位2進制來表示。
例:求-5的補碼。
-5對應帶符號位負數5(10000101)→除符號位外所有位取反(11111010)→加 00000001為 (11111011)
所以-5的補碼是11111011。
3.3  0的補碼
數0的補碼表示是唯一的 。
[+0]補=[+0]反=[+0]原=00000000
[ -0]補=11111111+1=00000000

4、補碼求原碼

已知一個數的補碼,求原碼的操作其實就是對該補碼再求補碼 :
⑴如果補碼的符號位為“0”,表示是一個正數,其原碼就是補碼。
⑵如果補碼的符號位為“1”,表示是一個負數,那么求給定的這個補碼的補碼就是要求的原碼。
例:已知一個補碼為11111001,則原碼是10000111(-7)。
解:因為符號位為“1”,表示是一個負數,所以該位不變,仍為“1”。
其余七位1111001取反后為0000110;再加1,所以是10000111。

5、意義

補碼“模”概念的引入、負數補碼的實質、以及補碼和真值之間的關系所揭示的補碼符號位所具有的數學特征,無不體現了補碼在計算機中表示數值型數據的優勢,和原碼、反碼等相比可表現在如下方面 [3] :

  • (1)解決了符號的表示的問題 ;
  • (2)可以將減法運算轉化為補碼的加法運算來實現,克服了原碼加減法運算繁雜的弊端,可有效簡化運算器的設計 [3] ;
  • (3)在計算機中,利用電子器件的特點實現補碼和真值、原碼之間的相互轉換,非常容易 [3] ;
  • (4)補碼表示統一了符號位和數值位,使得符號位可以和數值位一起直接參與運算,這也為后面設計乘法器除法器等運算器件提供了極大的方便。

總之,補碼概念的引入和當時運算器設計的背景不無關系,從設計者角度,既要考慮表示的數的類型(小數、整數、實數和復數)、數值范圍和精確度,又要考慮數據存儲和處理所需要的硬件代價。因此,使用補碼來表示機器數並得到廣泛的應用,也就不難理解了。 

 

 

 

創建時間:2021.10.29  更新時間:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM