原碼、反碼、補碼 基礎概念 和 計算方法 及 爲何會有反碼、補碼

1、原碼, 反碼, 補碼的基礎概念和計算方法.

對於一個數, 計算機要使用必定的編碼方式進行存儲. 原碼, 反碼, 補碼是機器存儲一個具體數字的編碼方式.html

 

1. 原碼

原碼就是  符號位  加上  真值的絕對值, 即用最高位表示符號, 其他位表示值. 好比若是是8位二進制:編碼

[+1]原 = 0000 0001

[-1]原 = 1000 0001

 

由於最高位是符號位, 因此8位二進制數的取值範圍就是:spa

[1111 1111 ~ 0111 1111]

code

[-127 ~ 127]

原碼是人腦最容易理解和計算的表示方式.htm

 

 

 

2. 反碼

正數的反碼是其自己blog

負數的反碼是在其原碼的基礎上, 符號位不變,其他各個位取反.get

[+1] = [00000001]原 = [00000001]反

[-1] = [10000001]原 = [11111110]反

可見若是一個反碼錶示的是負數, 人腦沒法直觀的看出來它的數值. 一般要將其轉換成原碼再計算.基礎

 

 

3. 補碼

正數的補碼就是其自己二進制

負數的補碼是在其原碼的基礎上, 符號位不變, 其他各位取反, 最後+1. (即在反碼的基礎上+1)方法

[+1] = [00000001]原 = [00000001]反 = [00000001]補

[-1] = [10000001]原 = [11111110]反 = [11111111]補

對於負數, 補碼錶示方式也是人腦沒法直觀看出其數值的. 一般也須要轉換成原碼在計算其數值.

補充:負數的補碼這麼記憶:符號位不變,其餘的從低位開始,直到遇到第一個1以前,什麼都不變,遇到第一個1後保留這個1,之後按位取反。

好比:-7[原] = 10000111

         -7[補] = 11111001

 

 

4. 計算   及   爲何會有反碼、補碼

   有符號整數,二進制的最高位表示正負,不表示數值,最高位爲0時表示正數,爲1時表示負數,

   這樣一來,能表示數值的就剩下(n-1)位了,

   好比 char a= -1; 那麼二進制表示就爲 1000 0001,

                1  表示爲 00000001 ,因此除去符號位剩下的7位

                0 1111111 = 127 ,1 1111111= -127,範圍應該爲 -127~127 ,

   可是問題出來了,教科書上是-128~127 啊,下面就剖析一下這個驚人的奇葩。。。

 

 

 

無符號的整數  用 所有二進制位 來存儲。

有符號的整數,最高位是 符號位 ,其他爲表示數值。

卻帶來一個麻煩,當進行加法時, 1 + 1

         0000 0001

      + 0000 0001

     ———————————

        0000 0010        =   2

 

 

當 1 - 1   ( 計算機只會作加法,因此會轉換爲 : 1 +(-1)

         0000 0001

      + 1000 0001

    ———————————

        1000 0010        = -2        1-1 = -2  ? 明顯不對

說明:用原碼 作 運算是不行的。

 

解決上面的問題:發明了反碼下面用 反碼進行加法計算   1 + (-1)

 1  是正數,反碼就是自己。

-1  是負數,反碼在其原碼基礎上,符號位不變,其他位取反

        0000 0001

      + 1111   1110

    ——————————————————

        1111    1111       由於是反碼計算,須要轉換爲原碼: 1000 0000 = -0

說明:反碼解決了相減的問題,卻又帶來一個問題 -0。  -0 == +0 == 0,  一個0 就夠了吧。

 

爲了不這個問題,又發明了補碼下面用補碼進行加法計算  1 + (-1)

 1  是正數,補碼就是自己。

-1  是負數,補碼在其原碼基礎上,符號位不變,其他位取反,最後 +1

        0000 0001

      + 1111   1111

    ——————————————————

       10000 0000        這裏變成了9位,char 爲 8位 最高位捨棄,結果爲0.  ok

 

 

 

https://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html

https://wenku.baidu.com/view/4d9cfe8b7cd184254a353515.html

相關文章
相關標籤/搜索