軟件設計師筆記之計算機系統知識二
計算機中的編碼
(1)二進制、十進制和十六進制等常用數制及其相互轉換:
由于計算機的存儲器和寄存器是兩態部件,所以各種信息在計算機中是以二進制的方式存儲和計算的。數制是由基數和基數個不同的數碼組成的。
BCD碼:十進制的二進制表示,
0:0000 1:0001 2:0010 3:0011 4:0100 5:0101
6:0110 7:0111 8:1000 9:1001
十進制的202可以表示成BCD碼為0010 0000 0010;
十六進制 <-> 二進制:十六進制表示法是用16位二進制數字組成的,每4位二進制數字表示一位十六進制數,十六進制的數字表示從0-9,A,B,C,D,E,F共十六個字符.十六進制與二進制相互轉換就是一位十六進制字符與四位二進制數字的相互轉換過程.
十進制 <-> 二進制:十進制向二進制轉換分兩步進行:首先把該數的整數部分和小數部分轉換為二進制數;然后再把這兩部分合并起來即可.十進制的整數部分向二進制轉換是通過對十進制不斷的除2取余數得到,十進制小數部分通過乘2取整的方法獲得,直到小數部分為0,所得到的整數部分就形成了二進制編碼;同樣的,二進制向十進制轉換如下所示:
十進制數N=(RnRn-1...R1R0R-1...R-m)
= Rn *2n+Rn-1*2n-1+...+R1*2+R0+R-1*2-1...R-m*2-m
八進制 <-> 二進制:二進制向八進制轉換的方法是從小數點開始分別向左右每3位二進制數編成一組,若不夠3位 ,則小數點左側的最高位和右側的最低位用0補充,每一組用對應的八進制的數碼表示即可;八進制向二進制轉換的方法是從小數點開始,把每一位八進制的數碼轉換成對應的3位二進制即可.其小數點左側的最高位或右側的最低位的0可以省去.
(2) 計算機中的二進制數運算方法:
1. 定點數運算:要判斷是否溢出?( )
加法:[X+Y]=([X]補+[Y]補) MOD 2
減法:[X-Y]=([X]補+[-Y]補)MOD 2
乘法:采用原碼比較方便,使用原碼一位乘法來求兩個定點數的乘積。運算規則為:
乘積的符號位等于乘數和被乘數的符號位進異或;
乘積的值等于兩數絕對值之積,即乘數和被乘數的絕對值進行移位相加;
除法:采用原碼比較方便。運算規則為:
商的符號位同定點數原碼乘法的處理方法,由兩數的符號位進行異或
兩數的絕對值部分進行相除。
2. 浮點運算
1) 加減法:
a) 對階
b) 尾數進行加、減運算
c) 規格化
d) 舍入
e) 溢出判斷
2) 乘除法:
浮點相乘,其積的階碼為兩數階碼相加,積的尾數為兩尾數相乘。
浮點數相除,其商的階碼為兩數階碼之差,商的尾數為兩尾數相除。
其結果都需要進行規格化處理,同時還需要進行溢出判斷。
(3) 邏輯代數的基本運算和邏輯表達式的化簡:
邏輯表達式就是以邏輯運算符把若干邏輯變量連接在一起表示某種關系的表達式。一個邏輯函數往往有多種不同的表達式。可以利用其本邏輯運算規律和一些常用的邏輯恒等式對邏輯表達式進行合并項、吸收項、配項、消去項等操作來化簡。
基本的邏輯運算有“與”、“或”、“非”、“異或”。
常用的邏輯運算公式:
交換律:A+B=B+A A*B=B*A
結合律:A+(B+C)=(A+B)+C
分配律:A*(B+C)=A*B+A*C A+(B*C)=(A+B)*(A+C)
反演律:A+B= A * B
重疊律:A+A=A A*A=A
互補律:A+ A =1 A* A =0
對合律: A =A
0-1律:0+A=A A*A=0
(4) 定點數與浮點數的機內表示:
定點數的表示方法:
1. 定點整數:(符號位)(最高數據位)。。。(最低數據位)
2. 定點小數:(符號位)小數點(最高數據位)。。。(最低數據位)
浮點數表示方法:
浮點數編碼:符號位-階碼-尾數,階碼由移碼表示,尾數由補碼或原碼表示;
規格化處理:以純小數表示尾數,分為原碼和補碼;#p#
(5) 原碼、補碼、反碼、移碼 ;
數值數據的機器內表示形式稱為機器碼,機器碼所代表的數值為該機器碼的真值。
原碼表示:[X]=X或2n-1-X;+0和-0的表示不同;(定點整數)
[X]=X或1-X; (定點小數)
+0=00000000 -0=10000000 (2的n次方-1個編碼)
補碼表示:[X]=X或2n+X; (定點整數)
[X]=X或2+X; (定點小數)
0的編碼唯一;00000000 (2的n次方個編碼)
-1=10000000 (小數) -1=11111111(整數)
反碼表示:[X]=X或(2n-1)+X; (定點整數)
[X]=X或(2-2-n+1)+X (定點小數)
+0=00000000 -0=11111111 (2的n次方-1個編碼)
移碼表示:[X]=X或2¬¬¬¬¬¬¬的(n-1)次方+X;0表示方法唯一10000000 (定點整數)
[X]=1+X; (定點小數)
0的編碼唯一:10000000 (2的n次方個編碼)
(6) ASCII碼及漢字編碼等常用的編碼 :
ASCII碼采用7bit編碼, 共有128種編碼;表示128個不同的字符;計算機里存儲和傳送單位通常使用Byte,所以7位的ASCII碼也用一個字節來表示,最高一位沒有用,通常也添0,也可以把它作為校驗位或用來擴展字符集。
EBCDIC碼采用8bit編碼,共有256個編碼,表示256個不同字符;
漢字編碼:
1. 數字編碼:每個漢字分配一個數字碼,用以代表漢字;
2. 拼音碼:用每個漢字的漢語拼音符號作為漢字的輸入編碼;
3. 字形碼:以漢字的形狀特點編碼,例如五筆字型編碼
漢字存儲:以內碼形式存放,以連續兩個字節表示,兩個字節的最高位均為1,漢字的內碼是在計算機內處理漢字信息時采用的機內代碼,把漢字的輸入編碼稱為外碼。
漢字輸出:漢字的點陣字型碼,點陣的密度決定了漢字的美觀程度,漢字需要大量的存儲空間,例如16*16點陣,每個漢字要占用16*16=32Byte
(7) 數據校驗碼:計算機在存儲和傳送數據過程中,為了保證數據的準確性,一般都要進行數據校驗和糾錯。通常使用校驗碼的方法來檢測數據是否出錯。其基本思想是把數據可能出現的編碼區分為合法編碼和錯誤編碼。
使用校驗碼來查錯,涉及到一個重要概念——碼距。它是指一個編碼系統中任意兩個合法編碼之間至少有多少個二進制位不同。碼距為1的編碼是不能發現錯誤的。
常用的校驗碼有3種。
▲奇偶校驗碼:不能發現偶數位錯誤
該編碼通過增加一位校驗位來使編碼中1的個數為奇數(奇校驗)或者為偶數(偶校驗)從而使碼距變為2,來檢測數據代碼中奇數出錯的編碼。因為其利用的是編碼中1的個數的奇偶性作為依據,所以不能發現偶數位錯誤。
校驗位的添加方法有三種:
水平奇偶校驗碼:對每個數據的編碼添加校驗位
垂直奇偶校驗碼:對一組數據的相同位添加一個校驗位;
水平垂直奇偶校驗碼:先對一組數據垂直校驗,所得結果再添加一位水平校驗位;
▲海明校驗碼:
也是利用奇偶性來檢錯和糾錯,通過在數據之間插入k個校驗位,擴大數據編碼的碼距,從而有能力檢測出n位錯,并能糾正1位或n位錯。
▲循環校驗碼(CRC)校驗碼:采用模2運算,可檢測所有等于、小于校驗位長度的突發錯,利用生成多項式為k個數據位產生r個校驗位進行編碼,其編碼長度為n=k+rk,又稱為(n,k)碼,生成的多項式與被校驗的數據無關。
概念:
編碼效率=(log2(碼字數))/總位數:
例題:在無線電通信中常采用7中取3定比碼,它規定碼字長為7位,并且其中總有且僅有3個“1”。這種碼的編碼效率為 ;35=
舉一個例子:關于二進制的編碼的考試題目
根據“冗余校驗”的思想,碼距可用來判斷使校驗碼制冗余的程度,并估價其查錯、糾錯能力。“8421”碼的碼距為A ,因而它B 。若一組海明(Hamming)碼有效信息位k=4,校驗位r=3,則其碼距為C ,用它能夠發現D位錯,并可糾正E位錯。
A、C、D、E: ①0 ②1 ③2 ④3 ⑤4 ⑥7
B: ①能發現1位錯 ②能糾正1位錯 ③能發現并糾正1位錯 ④不能查錯、糾錯
本題主要考查數據校驗方法的相關知識。
在這部分知識點中有個很重要的概念——碼距。碼距是指一個編碼系統中任意兩個合法編
這里有個定理,即若一種校驗碼合法碼字集的碼矩為2d+1,則它能夠發現2d位錯,并能糾正d位錯
A: 2 B: 4 C: 4 D: 3 E: 2