- 原碼、反碼和補碼是計算機中用來表示帶符號整數的三種編碼方式,它們在計算機內部的運算和表示過程中發揮重要作用。
- 在計算機系統中,數值一律用補碼來表示和儲存。
- 原因在於,使用補碼,可以將符號位和數值域統一處理;同時,加法和減法也可以統一處理。
1 計算機編碼方式:原碼 / 反碼 / 補碼
1.1 概念辨析
1.1.1 原碼
- 原碼(
Sign-Magnitude Representation
): 原碼是最直接的表示方法,其中最高位表示符號位(0
表示正數,1
表示負數),其餘位表示數值的絕對值。
- 例如,
+5
的原碼是0000 0101
,-5
的原碼是1000 0101
。- 原碼的優點是表示直觀,但在進行加法和減法運算時存在問題。
1.1.2 反碼
- 反碼(
One's Complement
): 為了解決原碼的加法和減法問題,人們引入了反碼
表示。在反碼
中,正數的反碼與其原碼相同,負數的反碼是將其原碼的每位取反**(0變1,1變0)。
- 例如,
+5
的反碼是0000 0101
,-5
的反碼是1111 1010
。- 儘管反碼解決了加法問題,但仍然存在溢位和零的表示問題。
1.1.3 補碼
- 補碼(
Two's Complement
): 為了徹底解決加法和表示問題,人們引入了補碼表示。
- 在補碼中,正數的補碼與其原碼相同,負數的補碼是將其原碼的每位取反後再加1。
- 例如,
+5
的補碼是0000 0101
,-5
的補碼是1111 1011
。- 補碼表示不僅解決了加法和表示問題,還能夠自然地處理溢位。
- 補碼表示的優勢在於:它允許用相同的方式處理正數和負數,以及能夠在數字的範圍內進行迴圈運算,而無需額外的處理。
因此,在大多數計算機體系結構中,補碼錶示被廣泛採用用於帶符號整數的表示和運算。
1.1.X 小結
- 總結起來,原碼、反碼和補碼是用於表示帶符號整數的三種編碼方式。
- 原碼表示直觀,反碼解決了加法問題,而補碼不僅解決了加法問題,還能夠自然處理負數的表示和溢位問題。
- 在計算機中,補碼錶示是最常見和有效的帶符號整數表示方式。
1.X 案例
1.X.1 案例1:真值、原碼和補碼的關係
- 以補碼定義式為基礎,沿數軸列出典型的真值、原碼與補碼錶示,可清楚瞭解補碼的有關性質
真值、原碼和補碼的關係
- (1) 在補碼錶示中,最高位X0(符號位)表示數的正負,在形式上與原碼相同,即 0正 1負。但補碼的符號位是數值的一部分,由補碼定義式計算而得。
例如,負小數補碼X0中為 1,這個 1是真值X(負)加模 2後產生
- (2) 在補碼錶示中,數 0只有一種表示,[+0]補 =[-0]補 =0.000……0
- (3) 負數補碼表示的範圍比原碼稍寬,多一種數碼組合。對於定點數,若為純小數,表示範圍為:
,若為純整數,表示範圍為:
。
1.X.2 案例2:0的補碼
- 數0的補碼錶示是唯一的。
- [+ 0]補 = [+0]反 = [+0]原 = 00000000
- [- 0]補 = 11111111+1 = 00000000
1.X.3 案例3:補碼 (推斷)> 原碼
- 例:已知一個補碼為
1111 1001
,則:原碼
是1000 0111
(-7)。
解:因為符號位為“1”,表示是一個負數,所以該位不變,仍為“1”;其餘七位
111 1001
取反後為000 0110
;再加1,補上負數的1
,所以是1000 0111
。
X 參考文獻
- 什麼是原碼、反碼和補碼 - 百度/小波程式設計師
- 補碼 - 百度百科