為什麼計算機採用補碼進行運算?

Exungsh?發表於2022-02-27

引入:現有一個時鐘,指向9點,那麼四個小時後將指向幾點?
顯而易見四小時後時鐘將指向1點。

時鐘構成了一個模12計數器。如果將0點當作一個邊界,那麼9點或許可以用另一個說法叫-3點,我們可以通過-3+4=1得到1,也可以通過9+4=13再模12得到1,這就是計算機採用補碼進行運算原理的一個比較好理解的解釋。

下面進行解釋:

如果符號不同的兩個數的絕對值相加等於模,則稱這兩個數互為補數。

1)一個負數可用它的正補數來代替,而這個正補數可以用模加上負數本身來得到。一個正數和一個負數互為補數時,兩數的絕對值之和為模。
2)正數的補數為其自身。

在時鐘的例子裡,我們要計算-3+4,就可以轉換為尋找-3的補數9,將9+4,將結果取模的過程。

類比到計算機中,如果兩個正數相加,這再好不過,直接相加即可。如果不幸為一正一負相加或兩個負數相加,如果採用原碼進行計算,就繁瑣的多。所以我們採用補碼進行計算,為簡略表示我們用四位數來表示補碼。

如果計算0110(原)與1011(原)相加
首先我們求出1011的補碼1,101(補)
這裡我們不妨看看1011和1,101相加會發生什麼(拋掉符號位,即取絕對值0011+1,101=10000,發現向前進了一位,但是計算機中的位數是固定的,這個位數會被捨棄掉(自動取模)。我們回到補數的定義:如果符號不同的兩個數的絕對值相加等於模,則稱這兩個數互為補數。

其實對負數求補碼,就是求負數的補數,用正數的加法替代減法。

這時我們將0110與1011的補碼1101相加,得10011,因為我們只有四位,所以最高位將被捨棄(相當於自動取模,13點取模後為1點),所以結果為0011,即3。

相關文章