言簡意賅剖析計算機使用補碼的意義

2021-08-08 11:57:49 字數 1387 閱讀 7077

計算機中為何直接用數字的二進位制原碼進行計算,而是用原碼的補碼形式進行計算呢?

讓我們來先看乙個例子:

想象乙個機械時鐘,現在時針對應3點,順時針撥一格(3+1)就是4點,逆時針撥一格(3-1)就是2點。如果時鐘不支援逆時針運動,那麼要到2點位置,我們可以順時針旋轉12-1=11格,這裡如果可以稱12為週期,1與11暫且定義為互為補數。所以減去乙個數等於加上這個數的補數。

signed和unsigned數的表示方法:

如果我們用乙個位元組(8bit)來表示乙個數。

如果這個數是非負數,那麼很簡單,從0000 0000~1111 1111 即0~255 能表示這256個數字完全沒有問題。

如果我們要表示乙個負數,計算機科學家已經想到用這個位元組的最高位作為符號位,0表示正數,1表示負數,剩下的7bit低位用來表示數字的絕對值。我們粗略可以想到從1111 1111~0111 1111 即 -127~127,這沒有問題。但是中間出現了1000 0000(-0)和0000 0000(+0)表示的本質都是0。造成了非唯一性和浪費。所以計算機科學家人為規定用1000 0000來表示-128。這樣乙個位元組表示有符號數字的範圍是-128~127,剛好256個。

我們繼續分析

在計算機中,如果兩個正數相加,計算機的加法器直接可以完成,但是如果是兩個數相減呢?難道我們還要單獨去設計減法器?甚至乘法器,除法器嗎?在數學中,我們可以把後三種運算轉化為加法運算。所以在計算機中我們也可以用同樣的原理。

例如:3-1 = 3+(-1)=2

3的二進位制  0000 0011

-1的二進位制1000 0001

如果直接做加運算結果為1000 0100(-4)顯然計算結果不對。

2的二進位制0000 0010

如果我們這樣計算:

0000 0011(3)

+1111  1111

=0000 0010(2)

這裡如果我們用1111  1111來代替上面的1000 0001(-1)來做加法計算能得到正確的結果,並且最高位的符號位不用區分對待,直接參與計算。

所以人們覺得在計算機運算中用二進位制1111  1111來表示(-1)直接做上述計算非常簡單。

那麼到底1000 0001和1111  1111又有什麼關係呢?他們怎麼轉化呢?

1000 0001的最高位不變,低7位求反1111 1110 然後再加0000 0001就等於1111  1111。這種運算被人們命名為求反碼運算。所以反碼的存在就是在這種需求中出現的。

回到最開始的例子,拋開符號位不管:

3-1=0000 0011 - 0000 0001=0000 0011 + 1111 1111=0000 0010(2)

所以這裡0000 0001(1)與1111 1111(127)對於週期128來說是補數的關係。其實原理讀者想必已經明白了其中內部的機制了吧,其實就是利用溢位的原理。

計算機補碼

1 可以將符號位與其他位統一處理,無須單獨設定符號處理線路。2 只使用加法器就可以實現加減運算。3 兩個用補碼表示的數相加時,如果最高位 符號位 有進製,則進製被捨棄。例 求 7的補碼表示。解1 7的補碼表示為00000111,按照轉換規則得出 7的補碼表示為11111001。解2 還有一種做法是根...

計算機補碼

名詞解釋 補碼 1 在計算機系統中,數值一律有補碼來表示 儲存 使用補碼,可以將符號位和其他位統一處理 同時,減法也可按加法來處理.另外,兩個用補碼表示的資料相加時候,如果最高位 符號位 有進製,則進違被捨棄.2 補碼與原碼的轉換過程幾乎是相同的 數值的補碼表示也分兩種情況 1 正數的補碼 與原碼相...

計算機基礎 計算機為什麼要使用補碼?

三 為什麼使用反碼?四 為什麼使用補碼?五 原碼 反碼 補碼優缺點 六 總結 n位補碼能表示的範圍 原碼中的符號位僅用來表示數的正 負,不參加運算,進行運算的只是數值部分。原碼運算時,應首先比較兩個數的符號,若兩數的符號相同,則可將兩個數的數值相加,最後給結果附上相應的符號 若兩數的符號不同,則需比...