計算機原碼, 反碼,補碼的介紹

我是壞男孩發表於2018-10-12

 原碼是什麼?

      原碼就是早期用來表示數字的一種方式: 一個正數,轉換為二進位制位就是這個正數的原碼。負數的絕對值轉換成二進位制位然後在高位補1就是這個負數的原碼

      舉例說明:

      int型別的 3 的原碼是 11B(B表示二進位制位), 在32位機器上佔四個位元組,那麼高位補零就得:

      00000000 00000000 00000000 00000011

      int型別的 -3 的絕對值的二進位制位就是上面的 11B 展開後高位補零就得:

      10000000 00000000 00000000 00000011      

      但是原碼有幾個缺點,零分兩種 +0 和 -0 。很奇怪是吧!還有,在進行不同符號的加法運算或者同符號的減法運算的時候,不能直接判斷出結果的正負。你需要將兩個值的絕對值進行比較,然後進行加減操作 ,最後符號位由絕對值大的決定。於是反碼就產生了。

 

 反碼是什麼 ?

      正數的反碼就是原碼,負數的反碼等於原碼除符號位以外所有的位取反

      舉例說明:

      int型別的 3 的反碼是

      00000000 00000000 00000000 00000011

      和原碼一樣沒什麼可說的

      int型別的 -3 的反碼是

      11111111 11111111 11111111 11111100

      除開符號位 所有位 取反

      解決了加減運算的問題,但還是有正負零之分,然後就到補碼了

 

補碼是什麼?

      正數的補碼與原碼相同,負數的補碼為 其原碼除符號位外所有位取反(得到反碼了),然後最低位加1.

      還是舉例說明:

      int型別的 3 的補碼是:

      00000000 00000000 00000000 00000011

      int型別的 -3 的補碼是

      11111111 11111111 1111111 11111101

      就是其反碼加1

有個疑問:

用一個位元組8位來表示機器數,用原碼、反碼、補碼來表示,其中最高位為0時表示整數,最高位為1時表示負數。

原碼錶示的範圍為-127,。。。,-0,+0,。。。,+127,其中0的表示不唯一,分+0和-0兩種。

[-0]原碼為10000000      [+0]原碼為00000000    

 

正數的反碼和原碼相同, 負數的反碼為原碼最高位不變其他位求反

反碼錶示的範圍為-127,。。。,-0,+0,。。。,+127,其中0的表示不唯一,分+0和-0兩種。

 

正數的補碼和原碼、反碼相同,負數的補碼為反碼加1

因為補碼中0的表示唯一,-0和+0的表示都是00000000,即為原碼0的表示,因此-0的原碼10000000都多出來用來表示-128

補碼錶示的範圍為-128,-127,。。。,-0,+0,。。。,+127,其中0的表示,唯一

 

補碼10000000比較特殊,最高位不僅表示符號“-”,而且表示數值。
---------------------

參考:https://blog.csdn.net/gyysmall/article/details/8052382?utm_source=copy 

參考:https://www.cnblogs.com/hanhuo/p/6341111.html

相關文章