原碼 反碼 補碼的概念


1.真值和機器數:

    一個十進制的數叫做真值,它在計算機中存儲的二進制形式的數叫做機器數

2.真值數據的表示形式:

  機器數有固定的位數,位數大小與計算機有關,通常為8位或者16位。以8位為例,最高位表示正負,0代表正,1代表負。例如10000011表示的數字是-3,最高位的1代表負號。

3.原碼:

  除了最高位的符號位外,其他7位是數值位即一個十進制數字的二進制表示方法。 

例如:

符號位 0

1

1

1

1

1

1

1

  表示的數字是:1*2^6+1*2^5+1*2^4+1*2^3+1*2^2+1*2^1+1*2^0=127

4.反碼:

  正數的反碼與原碼相同  

符號位 0(原碼)

1

1

1

1

1

1

1

符號位0(反碼)

1

1

1

1

1

1

1

    負數的反碼是除了符號位,其他位0變為1,1變為0;

符號位 1 (原碼)

0

1

0

0

0

0

1

符號位1(反碼)

1

0

1

1

1

1

0

5.補碼:

  正數的補碼與原碼相同

符號位 0(原碼)

1

1

1

1

1

1

1

符號位0(補碼)

1

1

1

1

1

1

1

  負數的補碼是在其反碼的最低位加1。其他位滿足滿2進1的計算原則

符號位 1(原碼)

0

1

0

0

0

0

0

符號位 1(反碼)

1

0

1

1

1

1

1

符號位 1(補碼)

1

1

0

0

0

0

0

6.補碼的意義:

  

  計算十進制的表達式: 1-1=0

1 - 1 = 1 + (-1) = [00000001] + [10000001] = [10000010] = -2

  如果用原碼表示, 讓符號位也參與計算, 顯然對於減法來說, 結果是不正確的.這也就是為何計算機內部不使用原碼表示一個數.

  為了解決原碼做減法的問題, 出現了反碼:

  計算十進制的表達式: 1-1=0

1 - 1 = 1 + (-1) = [0000 0001] + [1000 0001]= [0000 0001] + [1111 1110] = [1111 1111] = [1000 0000] = -0

  發現用反碼計算減法, 結果的真值部分是正確的. 而唯一的問題其實就出現在"0"這個特殊的數值上. 雖然人們理解上+0和-0是一樣的, 但是0帶符        號是沒有任何意義的. 而且會有[0000 0000]和[1000 0000]兩個編碼表示0。於是補碼的出現, 解決了0的符號以及兩個編碼的問題:

1-1 = 1 + (-1) = [0000 0001] + [1000 0001] = [0000 0001] + [1111 1111] = [0000 0000]=[0000 0000]

  而且可以用[1000 0000]表示-128:

(-1) + (-127) = [1000 0001] + [1111 1111] = [1111 1111] + [1000 0001] = [1000 0000]

  -1-127的結果應該是-128, 在用補碼運算的結果中, [1000 0000] 就是-128. 但是注意因為實際上是使用以前的-0的補碼來表       示-128, 所以-128並沒有原碼和反碼表示.(對-128的補碼表示[1000 0000]補算出來的原碼是[0000 0000], 這是不正確的)

   使用補碼, 不僅僅修復了0的符號以及存在兩個編碼的問題, 而且還能夠多表示一個最低數. 這就是為什么8位二進制, 使用原碼或反碼表示的范圍為[-127, +127], 而使用補碼表示的范圍為[-128, 127].

   


免責聲明!

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



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