數據格式
計算機中使用的數據可分成兩大類:
- 符號數據:非數字符號的表示(ASCII、漢字、圖形等)
- 數值數據:數字數據的表示方式(定點、浮點)
計算機數字和字符的表示方法應有利於數據的存儲、加工(處理)、傳送;
編碼:用少量、簡單的基本符號,選擇合適的規則表示盡量多的信息,同時利於信息處理(速度、方便)
進制轉換
這個一般都不是問題,但二進制小數轉十進制我忘了,所以在這復習一下
例如將0.11101轉為十進制那么應該這樣做:0*2^(0)+ 1*2^(-1)+1*2^(-2)+1*2^(-3)+ 0*2^(-4)+1*2^(-5)
計算機在數據、文字的表示方式時,應該考慮一下幾個因素:
- 表示的數據類型(符號、小數點、數值)
- 數值的范圍
- 數值精度
- 存儲、處理、傳送的硬件代價
- 是否有利於軟件的移植等...
定點表示
所有數據的小數點位置固定不變,理論上位置可以任意,但實際上將數據表示有兩種方法(小數點位置固定-定點表示法/定點格式):純小數和純整數,然后又分帶符號不帶符號
定點純小數
定點純整數
定點表示法的特點:
- 定點數表示數的范圍受字長限制,表示數的范圍有限;
- 定點表示的精度有限
- 機器中,常用定點純整數表示;
因為要表示實數(包括小數和整數),所以引入浮點數
浮點表示:小數點位置隨階碼不同而浮動
機器中表示
IEEE754標准(規定了浮點數的表示格式,運算規則等)規則規定了單精度(32)和雙精度(64)的基本格式,規則中,尾數用原碼,指數用移碼(便於對階和比較)
IEEE754標准
- 基數R=2,基數固定,采用隱含方式來表示它。
- 32位的浮點數:
- S數的符號位,1位,在最高位,“0”表示正數,“1”表示負數。
- M是尾數, 23位,在低位部分,采用純小數表示
- E是階碼,8位,采用移碼表示。移碼比較大小方便。
- 規格化: 若不對浮點數的表示作出明確規定,同一個浮點數的表示就不是惟一的。
- 尾數域最左位(最高有效位)總是1, 故這一位經常不予存儲,而認為隱藏在小數點的左邊
- 采用這種方式時,將浮點數的指數真值e變成階碼E時,應將指數e加上一個固定的偏移值127(01111111),即E=e+127
E: 階碼位數,決定數據的范圍,M: 尾數位數,決定數的精度
- 真值x為零表示:當階碼E為全0且尾數M也為全0時的值,結合符號位S為0或1,有正零和負零之分
- 真值x為無窮大表示:當階碼E為全1且尾數M為全0時,結合符號位S為0或1,也有+∞和-∞之分。
- 這樣在32位浮點數表示中,要除去E用全0和全1(255)表示零和無窮大的特殊情況,指數的偏移值不選128(10000000),而選127(01111111)。對於規格化浮點數,E的范圍變為1到254,真正的指數值e則為-126到+127。因此32位浮點數表示的絕對值的范圍是10-38~1038(以10的冪表示)。
- 浮點數所表示的范圍遠比定點數大。一台計算機中究竟采用定點表示還是浮點表示,要根據計算機的使用條件來確定。一般在高檔微機以上的計算機中同時采用定點、浮點表示,由使用者進行選擇。而單片機中多采用定點表示
指數采用偏移值,其中單精度偏移值為127,雙精度為1023,將浮點數的階碼值變成非負整數,便於浮點數的比較和排序
機器數的特點
原碼:表示簡單,運算復雜:符號位不參加運算,要設置加法、減法器,0的表示不唯一,不能直接判定是執行加法還是減法運算,分同號和異號
反碼:表示相對原碼復雜,運算相對原碼簡單:符號位參加運算, 只需要設置加法器,但符號位的進位位需要加到最低位,0的表示不唯一
補碼:表示相對原碼復雜,運算簡單:只需設置加法器,0的表示唯一
移碼(增碼):
BCD碼
表示一位十進制數的二進制碼的每一位有確定的權。一般用8421碼,其4個二進制碼的權從高到低分別為8、4、2和1。用0000,0001,…,1001分別表示0,1,…,9,每個數位內部滿足二進制規則,而數位之間滿足十進制規則,故稱這種編碼為“以二進制編碼的十進制(binary coded decimal,簡稱BCD)碼”
在計算機內部實現BCD碼算術運算,要對運算結果進行修正,對加法運算的修正規則是:
如果兩個一位BCD碼相加之和小於或等於(1001),即(9),不需要修正;如相加之和大於或等於(10),要進行加6修正,並向高位進位,進位可以在首次相加(例3.10③)或修正時產生
碼值轉換
補碼是在“模”和“同余”的概念下導出的。
“模”是指一個計量系統的計量范圍,即產生“溢出”的量。
5-2=5+10 (MOD 12)
5+(-2)=5+10 (MOD 12)
-2=10 (MOD 12)
可以說:在模為12的情況下,-2的補碼 就是10。 一個負數用其補碼代替,同樣可以得到正確的運算結果。
1、一個負數可用它的正補數來代替,而這個正數可以用模加上負數本身求得。
2、一個正數和一個負數互為補數時,它們絕對值之和即為模數。
進一步結論:
- 在計算機中,機器能表示的數據位數是一定的,其運算都是有模運算。如果是n位整數(不含符號位),其模為2n+1。如果是n位小數,其模為2。
- 若運算結果超出了計算機所能表示的數值范圍,則只保留它的小於模的低n位的數值,超過n位的高位部分就自動舍棄了。
補碼性質:高位表明正負,正數補碼,尾數與原碼相同,范圍-2n~2n-1(定點整數)
由原碼求補碼的簡便原則:除符號位以外,其余各位按位取反,從最低位開始遇到的第一個1及右邊的各位保持不變
由[X]補求[-X]補:連符號位一起各位求反,末位加1。
由[X]補求[X/2]補:將[X]補的符號位和數值位一起向右移動一次.符號位移走后保持原來的值不變.這稱為“算術移位”,[X/4]補和[X/8]補同理
n+1位補碼所能表示的數
反碼表示法
定義:正數的表示與原、補碼相同,負數的反碼符號位為1,數值位是將原碼的數值按位取反,就得到該數的反碼表示,電路容易實現,觸發器的輸出有正負之分
[x ]補=[x ]反+2^-n,反碼表示有正0和負0之分
移碼
特點:移碼和補碼尾數相同,符號位相反,范圍:-2n~2n-1
性質: 若[X1]移>[X2]移,則有 X1>X2.
原碼、補碼、反碼和移碼的區別,可分三個區域: