補碼-自己的理解

參考:http://wenku.baidu.com/view/c5489104581b6bd97f19eab5.html
在8位機,或者說8位數中,計算瑪的前提是:
1、原碼的範圍是-127~127;
2、反碼的範圍是-127~127;
3、補碼的範圍是-128~127;
補碼的形式可以用以下公式計算:
1)正整數的補碼與原碼相同;
2)負整數的補碼:2^8-|x|。【x爲負整數】。
因此-128可以通過2^8-128得到,即1000 0000。同時根據計算瑪的前提,-128是沒有原碼和反碼的。

至於補碼的範圍和計算,需要從爲什麼用補碼來說起了。在計算機的CPU中,計算單元只有加法器,而沒有減法器,所以如果兩個數,無論正負,只用加法就能計算出其值,是很符合CPU的計算方式的,但是原碼和反碼都不適合,所以計算機中沒有用原碼和反碼來存儲數據。這就要用到補碼了。這裏要引入一個重要的概念,模,對數求餘數用到的模。
用現實中的例子講解爲什麼通過模可以獲得一個只用加法就能計算出其值的原因。現實中,鐘錶中表盤上的數就是對12取餘而得到的數【12點也代表0點】,12就是這些數計算的模。我們規定,計算時,(1)順時針旋轉用正數表示;(2)逆時針旋轉用負數表示【這個負數最終是用正數表示的,見(5)】;(3)幾點,就用正數表示,比如指針指向2點,用2表示;(4)正數用本身代替,比如順時針轉到4點,就用4表示;(5)負數用12加上負數而得到的數表示,逆時針轉8個小時,即-8,用12+(-8)=4,用4表示(6)當計算的數字超過12時,用12取餘,爲最終計算的數,因爲最大數爲11。好,我們開始舉例,(1)當前鐘錶指向6點,順時針旋轉4個小時,指向了10點,即6+4=10;(2)當前鐘錶指向6點,順時針旋轉8個小時,指向了2點,即(6+8)%12=2;(3)當鐘錶指向6點,逆時針旋轉4個小時,指向了2點,即6+(12-4)=14,14%12=2;(4)當鐘錶指向6點,逆時針旋轉8個小時,指向了10點,即6+(12-8)=10.從上邊例子可以看出。在這個用模計算的計算系統中,沒有用到任何負數,即沒有用到任何減法【-8,用4代替,也是用的加法】。這是計算機計算需要的。
對於8位機或者8位數,數的理論最大值爲2^8 - 1=255,即256爲8位能表示數的模,這些數爲0~255,共256個,因爲需要表示正負,所以分爲2部分,即0~127、-1~-128,正數128個,負數128個,所以範圍爲-128~127。而計算的規則與上邊鐘錶的規則大同小異,只不過模爲256而已,比如說-6,用256+(-6)=250表示,即1111 1010,同理,-128用256+(-128)=128表示,即1000 0000,正數就用本身表示即可。
發佈了48 篇原創文章 · 獲贊 13 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章