[計組] 計算機編碼方式:原碼、反碼、補碼

  • 原碼反碼補碼是計算機中用來表示帶符號整數的三種編碼方式,它們在計算機內部的運算和表示過程中發揮重要作用。

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

1 計算機編碼方式:原碼 / 反碼 / 補碼

1.1 概念辨析

  • 原碼:正數是其二進制本身;負數是符號位爲1,數值部分取X絕對值的二進制。
  • 例如,+5的原碼是 0000 0101-5的原碼是 1000 0101
  • 反碼:正數的反碼和原碼相同;負數是符號位爲1,其它位是原碼取反。

  • 補碼:正數的補碼和原碼,反碼相同;負數是符號位爲1,其它位是原碼取反,未位加1。(或者說負數的補碼是其絕對值反碼未位加1)

  • 移碼:將符號位取反的補碼(不區分正負)

舉例說明:

編碼 $$108_{10}$$(sbyte) $$-108_{10}$$(sbyte)
原碼 01101100 11101100
反碼 01101100 10010011
補碼 01101100 10010100
移碼 11101100 00010100

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 參考文獻

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章