補碼


補碼是為了解決計算機中負數加法問題而引入的一個概念.我學習補碼的時候,只記住了負數補碼的求法符號位不變,按位取反,再加一,至於為什么一直都不明白.所以這篇文章將嘗試深入剖析這個問題

補碼是一個相對的概念

設想有一個時鍾,正好是3點,那么既可以是順時針走了3格,也可以是逆時針走了9格,規定順時針為正,那么3和-9其實在同一個地方,也就是說-9相對12的數是3.但是不一定非要相對12,相對15也可以的,-9相對15的數是6

補碼的符號位變成值位

回到二進制中,在原碼中,符號位表示這個數是正是負,但是一經轉換成補碼,符號位就變成了值位.
用5位二進制數做例子,最高位是符號位,其余四位是值位

\[-10_{d}=11010_{b原碼}=10110_{b補碼} \]

將最高位看成是值位

\[value=1\cdot 2^4+0 \cdot 2^3 +1 \cdot 2^2 + 1 \cdot 2^1 + 0 \cdot 2^0=22 \]

所以22是-10相對哪個數字的補碼呢?
一眼看出是32,但是為什么是這個是數呢?
考慮求補碼的過程
符號位不變,按位取反,再加一.因為是負數,符號位為1,加上了\(2^4\);按位取反,本質是和1進行異或操作.到此為止求的是相對\(11111_{b}\)的補碼,也就是相對於31的補碼,最后再加上1,才是相對32的補碼

補碼的優勢

補碼的改進之處在於消除了符號位影響,所有的計算都是無符號的加法,計算完成之后,結果也以補碼的形式保存.
另外說一句,我想了一下,好像只有二進制才能實現補碼,因為只有二進制才能方便的進行取反操作,其他的數制都不能取反,只能直接和目標進行相減.


免責聲明!

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



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