計算機為什麼要用補碼

Candy_GL發表於2019-03-22

轉自:https://blog.csdn.net/bendanban/article/details/8681456

計算機使用補碼錶示負整數!正整數就用原始碼來表示。那什麼是補碼呢?其實原始碼的補碼就是原始碼的相反數,他們相加得0 。

計算負整數的補碼:
規則就是原始碼各位取反,然後加1得到。

例如:如果我們用8位來表示有符號整數的話,那麼十進位制1用二進位制表示為:

00000001
這個數取反加1的結果是:
11111111

所以,-1的補碼就是11111111。
大家可能會有疑問,到底什麼是補碼,為什麼-1的補碼不是-1的原始碼取反加1呢?

這是因為:-1的補碼是1的補碼錶示法。所以計算機裡用1的相反數(就是-1的補碼)來表示-1 。

計算二進位制有符號數的十進位制數
既然有符號數在計算機裡有補碼錶示負整數,那我們如何根據給定的二進位制數來計算十進位制數呢?

看例子:

假設給了一個數:

10000100

看符號位為1,為負數,所以這個數是用補碼錶示的!先計算原始碼。

各位取反加1的結果是:

01111100(二進位制) = 124(十進位制)

所以原先給出的二進位制數的十進位制數是 -124 。


計算負整數的二進位制補碼錶示
繼續剛才那個例子,如果我們拿到的是十進位制-124,那麼他的二進位制補碼是多少呢?

其實他的補碼就是124的二進位制數求補的結果。

124的二進位制數為:01111100

取反                       :10000011

加1                         :10000100

所以-124的二進位制補碼錶示就是10000100

為什麼使用補碼錶示負整數
原因很簡單,如果使用補碼錶示負整數,那麼ALU在做整數之間的操作時,就不用區分符號了,所有位都會參與運算,其上上面的例子中,符號位都參與了運算。

例如執行2-1這個操作,我們可以用2+(-1)來計算。

2的二進位制數是:00000010

1的二進位制數是:00000001   -->   -1的二進位制補碼是:11111111

所以2+(-1):

  00000010
+ 11111111
----------------
  00000001

結果是1。
我們再看個結果為負數的。

求1-2的結果,用1+(-2)來計算。

2的二進位制數是:00000010,所以-2的二進位制數為:11111101+1=11111110

1+(-2)的計算過程是:

  00000001
+ 11111110
---------------
  11111111

這個結果的十進位制數是多少呢?
首先它是個負數,說明結果使用補碼錶示的,將各位取反加1後的結果是00000001=1(十進位制),然後加上他的符號,就是-1了,

所以1+(-2)的結果是-1 。

用補碼計算確實簡化了ALU的設計難度!!所以計算機用補碼來表示負整數!!!!

應該看明白了。。
--------------------- 
作者:bendanban 
來源:CSDN 
原文:https://blog.csdn.net/bendanban/article/details/8681456 
版權宣告:本文為博主原創文章,轉載請附上博文連結!

相關文章