簡單而又深入的認識:原碼、補碼、反碼

整數類型的儲存spa

前面 所說的位運算都沒有涉及負數,都假設這些運算是在unsingned/word類型(只能表示正數的整型)上進行操做。設計

但計算機如何處理有正負符號的整型呢?這個設計到補碼,反碼知識點,請看下面硬件

       假設有一 int 類型的數,值爲5,那麼,咱們知道它在計算機中表示爲:00000000 00000000 00000000 00000101
5轉換成二進制是101,不過int類型的數佔用4字節(32位),因此前面填了一堆0。
       如今想知道,-5在計算機中如何表示?
      在計算機中,負數以其正值的補碼形式表達數據類型

      什麼叫補碼呢?這得從原碼,反碼提及。二進制

反碼,補碼數據

       反碼和補碼的目的就是爲了解決負數的問題
       在計算機內,定點數有3種表示法:原碼、反碼和補碼

       所謂原碼就是前面所介紹的二進制定點表示法,即最高位爲符號位,「0」表示正,「1」表示負,其他位表示數值的大小。margin


反碼錶示法規定:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。top

補碼錶示法規定:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。word

      有原碼就能夠了,爲何還須要反碼和補碼?計算機

       

      反碼是用來算補碼的,原碼和補碼都是用在CPU的基本運算裏的,好比數據類型是short:   
      計算5   -   2,並因爲實際上CPU沒有實現減法電路(注:計算機的硬件結構中只有加法器,因此大部分的運算都必須最終轉換爲加法,原碼沒有辦法作減法,而在咱們使用的彙編、C等其餘高級語言中使用的都是原碼,原碼轉換成補碼都是在計算機的最底層進行的)。原碼計算是   5+(-2)

     0101

  +1010

  -------  

      1111 


  =-7?顯然出錯
 因此無論正數仍是負數,都使用補碼來表示(正數原碼和補碼是同樣的),  2的補碼是1110,而後用5補   +   2補   
      0101   
  +  1110   
  ------   
      0011   

  =3,正確

相關文章
相關標籤/搜索