計算機中數值型資料二進位制形式儲存過程中的原碼,反碼與補碼
在計算機系統中,數值一律用補碼來表示和儲存。原因在於,使用補碼,可以將符號位和數值域統一處理;同時,加法和減法也可以統一處理。此外,補碼與原碼相互轉換,其運算過程是相同的,不需要額外的硬體電路。
舉個例子快速掌握吧
給一個數求補碼
1、正整數的補碼是其二進位制表示,與原碼相同
+9的補碼是00001001,二進位制表示也是00001001,原碼:00001001
2、求負整數的補碼,將其對應的二進位制表示除了符號位的所有位取反後加1
求-5的補碼。-5是負數,符號位是1,則對應-5的二進位制表示也是原碼(10000101)符號位不變,其餘位取反加1→(11111011)。所以-5的補碼是11111011。為,原碼(true
form)
補碼求原碼
已知一個數的補碼,求原碼的操作其實就是對該補碼再求補碼:
1如果補碼的符號位為“0”,其原碼就是補碼。
2如果補碼的符號位為“1”,符號位不變,其餘位取反加1,那麼求這個補碼的補碼就是要求的原碼。
e.g.已知一個補碼為11111001,則原碼是10000111(-7)。
因為符號位為“1”,表示是一個負數,所以該位不變,仍為“1”。
其餘七位1111001
再加1,所以是10000111。
已知補碼求表示的數值
e.g.-65的補碼是10111111
若直接將10111111轉換成十進位制,發現結果並不是-65,而是191。
事實上,在計算機內,如果是一個二進位制數,其最左邊的位是1,則我們可以判定它為負數,並且是用補碼錶示。
若要得到一個負二進位制補碼的數值,只需求對應的二進位制表示即可,即只需求原碼即可,只要對除符號位的其餘位取反加1,就可算出其餘位所表示的十進位制數,將符號位變為負號-,加在這個十進位制數前面即獲得此數。
如:二進位制值:10111111(-65的補碼)
除符號位其餘位取反:1
加1:11000001(-65)
+0與-0
首先正數的反碼補碼與原碼相同
+0的原碼:00000000
+0的反碼:00000000
+0的補碼:00000000
-0的原碼:10000000
-0的反碼:11111111(後面分析-0無反碼)
-0的補碼:00000000(補碼規定0沒有正負之分)
-128的原碼:10000000
-128的反碼:11111111
-128的補碼:10000000
-0與-128有相同的反碼,為減少歧義,-0沒有反碼。
綜上所述:1.-128的補碼和原碼一樣都是1000 0000,
2.0的原碼、反碼和補碼都一樣(即0000 0000)
3.如果把-0當做負數,1000 0000就會有歧義(事實上0的補碼只有一個0000 0000)
補碼的範圍是[-2^(n-1),2^(n-1)-1]