關於計算機中數值的表示的那點小事

一、

1、數值在2進制中的表示有3種:原碼、反碼和補碼;這裏我只記第3種,因爲計算機中,數值的表示只用第3種補碼,另外兩種用網友的話就是科學家沒事吃飽了撐的造出來的(只是開個玩笑,根據哲學中存在比有用的原理,相信他們在其他領域一定還是用的);

2、求補碼原則:(1)正數補碼還是他本身 (2)負數補碼,符號位變成1,其他位取負數的絕對值後按位取反再加1 (3)補碼中高位進位都直接丟掉

3、補碼的原理:

引入:

生活中我們都知道,

 (1)把時鐘正撥20分鐘和倒撥40分鐘結果是一樣的

 (2)物體正向旋照90度,和它反向旋轉270度是一樣的

在舉一個數學之美,

(3)50 - 20 = 30; 因爲20的補數是80(100-20=80),則50 + 80 = 130,去掉進位1,他們的個位+十位是一樣的 (再次感嘆數學之美)

這就是補數的美麗,正變換一個過程,就等於逆變換這個過程的補數過程(補數過程自己起的名字,不知道該叫他什麼了),還有對我們今天講的最關鍵的:減去一個數 == 加上這個數的補數,

PS.忘了提上面中一個的關鍵字:模;模就是規定當一個數大到什麼程度的時候要進位,然後再從頭開始,物體旋轉,最大隻能旋轉360度,大到360不能再大了就進位然後再從0開始(哲學上,物極必反的道理啦)。這個極限(物體能表示的最大值再+1)就是我們的模;

再回到我們的計算機上,一個數,爲了簡便我們規定一個數用8bit存,那麼8bit的數最大就是1111,1111 不能再大了,再大就進位然後變成 0000,0000。所以8bit 的極限就是2^8-1+1 = 2^8 (極限這個值是表示不出來的,例如沒有360度,因爲360度就是0度,始終也沒有60分鐘,60分鐘後又變成0了)

 

4、計算機裏面只有加法器沒有減法器,所有隻能把所有的減法操作都改成加法:所以聰明的科學家就想到了補數這個特性,把所有的定點數都用補數來存;

注意表示的時候,要根據補數的原則(就是那個正數補數是本身......)再變成原始數據;


5、8位的補碼能表示的數值範圍

由於有符號位,所以補碼最大是 0111,1111 = 1000,0000 - 1 =  2^7 -1 = 128 -1 = 127

最小  , 1111,1111 = -(111,1111)= - (1000,0000 - 1)= - (2^-1) = -127

所以補碼的數值範圍是 -127 ~ +127


6、補碼還有一個好處就是 0的表示是唯一的,這一點原碼和反碼是不具備的。

+0 = 0000,0000

-0 = 1111,1111+1 = (進位丟掉1)0000,0000


二、舉例子

還是上面那個例子 50 - 20;

計算機中的處理方式是:

把所有的操作數求補碼,運算符當作符號位送給又操作數

所以

(1)+50 的補碼,0,011,0010

  (2)-20 的補碼,

 原始二進制數  :  1,001,0100

(符號位置1,數值位將2進制數按位取反再+1) = 1,110,1011+1 = 1110,1100

那麼50 - 20 = 50+(-20)

在機器中就是[50】補碼+【-20】補碼 =

  0011,0010

+1110,1100

-------------------

= (1進位丟掉)00011110

(對於高位1,再重複一遍:補碼運算進位超過高位就丟掉,不然補碼就失去他的良好特性了)

所以50-20 的結果在計算機中的存放的就是 00011110,

但顯示的時候,我們還要按照補碼的原則,逆變回來(爲了變成人們習慣的數)0001,1110 = 30 (tada!!!!! 神奇的補碼!!!!)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章