三碼——原碼、反碼、補碼


 

百度詞條:

  計算機中的有符號數有三種表示方法,即原碼反碼和補碼。三種表示方法均有符號位和數值位兩部分,符號位都是用0表示“正”,用1表示“負”,而數值位,三種表示方法各不相同 [1]  。在計算機系統中,數值一律用補碼來表示和存儲。原因在於,使用補碼,可以將符號位和數值域統一處理;同時,加法和減法也可以統一處理 [2]  。

原碼:

  符號位0表示正數,符號位1表示負數

  正數原碼 = 0 + 正數絕對值

  負數原碼 = 1 + 負數絕對值

反碼:

  正數的反碼不變,負數原碼符號位的1不變,絕對值部分按位取反

補碼:

  正數的補碼等於原碼,負數的補碼等於負數的反碼加1

例如:

  +20的原碼:00010100

  +20的反碼:00010100

  -20的原碼:10010100

  -20的反碼:11101011

補碼:

  正數補碼 = 正數反碼 = 正數原碼

  負數補碼 = 負數反碼符號位的1不變,絕對值部分+1

例如:

  +20原碼:00010100

  +20反碼:00010100

  +20補碼:00010100

 

  -20原碼:10010100

  -20反碼:11101011

  -20補碼:11101100

 

  計算機在執行有負數參與的計算時,就必須用補碼。原因是計算機內部只有加法器,沒有減法器,換言之,計算機只能進行加法運算,不能進行減法運算,所以,在計算減法運算時,需要通過轉換成加上“減數相反數”的形式進行運算,因此計算機中引入了補碼運算。

 

 

具體計算:

  取一個數字的補碼表示數:

1.

 

        if (num > 0)
            x = num;
        else
            x = pow(2, 32) + num;
2.
  另一個計算法為:
  unsigned int x=num;
  直接一句轉化。
學習博客在這里
【Over】


免責聲明!

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



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