詳解二進制補碼


過去學計算機組成原理時一直沒有搞明白補碼的意義,今天聽了王紅老師的數字電子基礎課才了解到,慚愧!

數制和碼制

在正文開始之前,首先要明確兩個概念,就是數制和碼制,

比如下面這個數字:

100832

他可能代表的是整型值十萬零八百三十二,這就是數制;但如果它代表的是郵政編碼,這就是碼制;

二進制補碼

帶符號二進制的運算依賴於補碼,如

+5: 0 0101
-5: 1 0101

最高位為0則為正,為1則為負。正常來講我們將其相加應該是0,但實際上:

  00101
 +10101
 ------
  11010

直接相加得到的結果並不是我們想要的,這是因為哦這樣想加混淆了數制和碼制,最高位的0和1並不和地位一樣代表着數值,所以和它們一起直接計算必然就會出錯。

所以帶符號的二進制數的計算依賴於補碼,補碼的表示如下:

+5: 0 0101
-5: 1 1011

這里有幾個要解釋和注意的點:

  • 補碼和原碼的轉換規則:正數補碼和原碼相同,負數的補碼為原碼的數值位取反加一、符號位不變

  • 補碼的計算:

    如-5的補碼為 11011,即\(-2^{4}+2^3+2^1+2^0=-16+8+2+1=-5\),即符號位代表了一個很大的負數值,足以糾正數制位的正數值。從這里也能理解為什么n位二進制補碼可以表達的范圍為\(-2^{n-1}...2^{n-1}-1\)

  • 負數的補碼需要添位時直接往高位添1即可

  • 符號位的處理:最終的符號位就是兩者符號位相加再加上上來的進位

  • 考慮到結果的位數,要清楚的知道最后的范圍是多少,否則就會出錯。考慮5位補碼運算13+10:

    0 1101
    0 1010
    -------
    1 0111=-7
    


免責聲明!

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



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