計算機原理:二進位制 原碼 反碼 補碼
在計算機中,1byte=8位,若是無符號的情況下可表示的數字總個數為2^8=256個數,但是計算機只會進行加法運算例如:
5-4 =1 在計算機中的運算方式是 5+(-4)=1,故在計算機中要加入負數的概念,以方便加減法運算。
二進位制的字串中區分正負數,做了以下規定:最高位作為符號位 0表示正數 1表示負數
正數範圍(補碼) 0000 0000~0111 1111 0~127
負數範圍(補碼) 1000 0000~1111 1111 -128~-1
共256個數(至於為什麼是補碼,後面會詳細解釋)
接下來介紹下 原碼,反碼,補碼。為了能準確表達,以下規定正數的反碼,補碼都等於原碼;負數的補碼等於把反碼加1
例如:
83 ~ 原碼 反碼 補碼 0 101 0011
83……1
41……1
20……0
10……0
5……1
2……0
1……1
-83 ~原碼1 101 0011
83……1 ~反碼1 010 1100
41……1 ~補碼1 010 1101
20……0
10……0
5……1
2……0
1……1
根據補碼求真值:
為什麼計算機中要以補碼方式表示數值?解釋如下:
首先要了解下什麼是計數系統
一個計數系統可以存多少容量狀態的數,我叫它作為計數系統的Mod。一個計數系統不斷地加一,那麼它表示的數的狀態也會週期性地變化,我叫這個週期的大小叫做Mod。
舉個例子:一個時鐘顯示十二個小時,時針旋轉一週後回到原來的狀態,即該系統的Mod為12。只要時針轉360度(也就是12小時),就會和現在所在的數值一樣。
由此,可以得到一個結論。這種週期性變化的計數系統,一個狀態加減整數倍的Mod,其狀態不會有不會發生變化。
計算機能進行的運算只有加法故需:變減為加
在計算機中使用加法器對資料進行計算,那麼如何進行減法的運算呢?
設Mod=32
若a=3,b=-4,則a+b=a+b+Mod=-1+Mod=a+(Mod-4)=31(在計數系統中-1和31等價)
實際上Mod-4就是b的補數,所有的減法在計算機中都可以轉化為加上減數的補數,對應計算機上的概念就是補碼。
因此,計算機是使用補碼(補數)進行計算。