計組:計算機為什么有反碼補碼?不列公式!


你是如何做減法的?

200-134=? 相信這個問題難不倒你,讀到這句話的時候,你可能已經口算出了答案。讓我們慢一點,來看看我們是如何一步一步做減法的。
​ 你的腦海里可能浮現出了一個詞:借位。沒錯,減法比加法麻煩的就是,它沒有進位,但有借位這個煩人的東西。對於這道題,將它寫成豎式,從最右邊那一列入手,0是小於4的,所以往左邊借一位,再用10減去4得到6。因為我們往左邊的0借了一位,所以實現上這時的0應該變成-1,-1是小於3的,所以我們又要往左邊借一位。你看,借位是多么的麻煩!

那該如何是好呢,大人?

​ 那么如何通過邏輯門來實現這個邏輯呢?嘿!嘿!嘿!看字,別再想了,你簡直是在折磨自己,為了讓自己好過一點,我們需要想辦法來回避借位操作:
​ 什么情況下,被減數不需要借位?格嘰,格嘰,格嘰格嘰,開動你的腦筋。沒錯,每一位都是9的時候!這里的操作數是3,所以我們取3個9減去134。

從一串9中減去一個數,稱為對9求補數

​ 那么現在,原式變成了這樣

\[200+(999-134)-999 \]

​ 因為200-102是個整數,再加上999就進位了。所以我們不妨把減999變成減1000,這樣做減法的時候好算一點

\[200+(999-134)+1-1000 \]

​ 這樣,我們就回避了借位。在十進制中是取對9的補數,那么在二進制中就是使用1了,上面的例子可化為:

\[\begin{equation}\begin{split} 11001000\\ -10000110\\ \hline \end{split}\end{equation} \]

​ 第一步,我們用11111111(十進制中為255)減去減數:

\[\begin{equation}\begin{split} &{11111111}\\ -&{10000110}\\ &\hline {01111001} \end{split}\end{equation} \]

​ 在二進制中,對1求補數可以不用減法,因為1減去1為0,1減去0為1,只需要按位取反即可。所以對1求補數,也可以稱為相反數或者反碼

​ 第二步,把減數對1的補數與被減數相加

\[\begin{equation}\begin{split} {01111001}\\ +{11001000}\\ \hline {101000001} \end{split}\end{equation} \]

​ 第三步,將所得結果加1

\[\begin{equation}\begin{split} {101000001}\\ +{1}\\ \hline {101000010} \end{split}\end{equation} \]

​ 第四步,將所得結果減去100000000(十進制中的256):

\[\begin{equation}\begin{split} {101000010}\\ -{100000000}\\ \hline {001000010} \end{split}\end{equation} \]

​ 結果001000010相當於十進制的66

有符號數的減法

​ 在計算機中,我們只有0和1,可沒有負號告訴我們這個數是負數。那么如何來表示負數呢?最簡單的當然是用一個二進制數表示負號,當這一位為0時表示正數,當為1時表示負數。不過,根據我們上面的方法,我們用求補數的辦法規定正負數,還能輕松的將正負數相加。不過這種方法也不是十全十美的,缺點就是你得提前知道可能遇到的所有數字的位數。

​ 如果你的花唄額度是500,並且你的余額不超過500,那么你的額度應該在-500到499之間,那我們就可以把:

\[-500,-499,-498....-2,-1,0,1,2...497,498,499 \]

寫成

\[500,501,502...998,999,000,001,002...497,498,499 \]

​ 這種機制在二進制中稱為2的補數。(求2的補數就是先求1的補數再加1)通俗點就是將0到1000分成兩半,前一半為正,后一半為負。對應到二進制就是,1開頭的為負數,0開頭的為正數。跟一開始的用特定二進制位表示正負數從這里來看,沒有什么區別。01嘛,二進制。

​ 現在134-200就相當於134加上-200:

\[\begin{equation}\begin{split} 010000110\\ +100111000\\ \hline 110111110 \end{split}\end{equation} \]

​ 10111110是1000010(66)對2的補數,又110111110首位是1代表是負的,所以結果是-66


免責聲明!

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



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