應權重的乘積。例7(10) = 111(2) = 2^2+2^1+2^0;8(d)=1000(b)=2^3+0*2^2+0*2^1+0*2^0
八進制的一位即可。例:15(10)=1111(2)=001 111(b)=17(o)
表示,其4位二進制碼與1位十六進制碼相同。例:28(10)=1 1100(b)=1C(h)=1CH
擴:二進制-Binary;八進制-Octal;十進制-Decimal;十六進制-Hexadecimal
以小數點爲界,左邊向左數,每3/4位一組轉爲八/十六進制,不足用0補;
小數部分向右數,也是每3/4位一組轉爲八/十六進制,不足用0補。
例:1011010.11011(b)=001 011 010.110 110(b)=0101 1010.1101 1000(b)=132.66(o)=
5A.D8(h)=90.84375(d)(任何進制轉十進制——將各位對應權重與數值相乘後再相加,例:0.11011(b)=1*2^-1 + 2^-2 + 0*2^-3 + 2^-4 +2^-5,其他進制類似)
以小數點爲界,左邊的整數部分和右邊的小數部分,對要轉換的進制(稱爲
基數)進行除基取餘/乘基取整,再將兩部分沿小數點左右拼接得出結果。
例:56234.789(b)轉爲十六進制,整數部分:56234/16=3514…10, 3514/16=219…10
219/16=13…11, 13/16=0…13,對應順序就是13、11、10、10,即DBAA;小數部
分:0.789*16=12.624->12,0.624*16=9.984->9,0.984*16=15.744->15,0.744*16~12
注意小數部分轉換過程有誤差,一般確定一定的精度即可,故小數部分對應順序
爲12、9、15、12,即C9FC,故轉爲十六進制爲DBAA.C9FC(h)
校驗碼是指能夠發現或能自動糾正錯誤的數據編碼,又稱檢錯糾正編碼。
原理:通過增加一些冗餘碼(在正常編碼之外的數碼)來檢驗或糾錯編碼
碼距:任意兩個合法碼字之間最少變化的二進制位數。碼距越大糾、檢錯能力越強,而且檢錯能力總大於等於糾錯能力。
方法:由有效數據+1位校驗位組成,校驗位取1或0可使整個校驗碼中
「1」的個位爲奇數(奇校驗嘛)或偶數(偶校驗碼)
糾錯理論:L-1=D+C 且D>=C. 編碼最小碼距L越大,檢測錯誤的位數D越大,糾錯的位數C越大。
步驟:1.確定漢明碼的位數:n+k<=2^k – 1(n爲有效信息的位數,k爲校驗位的位數,若要檢測兩位錯,需再增加1位校驗位,即k+1 位);2.確定漢明碼校驗位的位置:規定校驗位Pi在漢明碼中爲2^i-1位中;3.分組:將剩下的有效位的位置寫成2進制碼,由校驗位在對應位的加權爲1對應分組;4.將每組對應位的數值與校驗位異或使其結果爲0,得校驗位數值;5.檢測與糾錯:利用校驗位和對應的信息位進行奇偶校驗,對應的數值爲對應位出錯,將該位數值取反即可
例:已知漢明碼的有效位D1-D8爲11010101,求其最終漢明校驗碼
1.確定位數:n爲8,由8+k<2^k – 1,解得k=4;2.確定校驗位位置:校驗位X1=0001=1,X2=0010=2,X3=0100=4,X4=1000=8;3.分組:將D1-D8按順序和X1-X4一起排列爲:
0001 |
0010 |
0011 |
0100 |
0101 |
0110 |
0111 |
1000 |
1001 |
1010 |
1011 |
1100 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11, |
12 |
X1 |
X2 |
D1 |
X3 |
D2 |
D3 |
D4 |
X4 |
D5 |
D6 |
D7 |
D8 |
X1 |
X2 |
1 |
X3 |
1 |
0 |
1 |
X4 |
0 |
1 |
0 |
1 |
分組爲X1:對應爲第4位爲1:D1、D2、D4、D5、D7;X2:對應爲第3位爲1:D1、D3、D4、D6、D7;X3:對應爲第2位爲1:D2、D3、D4、D8;X4:對應爲第1位爲1:D5、D6、D7、D8;4.得校驗碼:將X1與D1、D2、D4、D5、D7對應的數值異或(相同爲0,不同爲1)X1Å1Å1Å1Å0Å0=0,則X1=1;同理X2=1;X3=1;X4=0;故該漢明碼爲:1 1 1 1 101 0 0101(從左到右權重增加);5.校驗:當某一位出錯如:D1=0,將X1=1與其小組數值異或,得S1=1;S2=1;S3=0;S4=0,故在0011位,即第3位(D1)處出錯,將其數值取反即爲正確。
線性編碼理論:發送端通過將K位數據左移R位後與生成的多項式G做模2除,生成R位校驗碼,將K位數據和R位校驗碼一起發送出去;接收端通過生成的多項式對K+R做模2除,若能整除則爲正常,否則對應餘數確定出錯位置。
多項式與二進制轉換:多項式的最高冪次爲R,轉成二進制有R+1位;二進
制數用係數僅爲「0」或「1」的多項式表示:例:x3+x2+1對應爲1101;1011對應多項式爲:x3+x+1.
例:有效信息碼爲:11010101,多項式G= x3+x2+1,求對應的CRC碼:
該題1101 0101/1101,前4位相模2除,商爲1,此時餘數爲0;右移1位仍爲0,商爲0;右移1位,此時餘數爲001,不足,商爲0;右移1位,餘數0010,商爲0;繼續右移,餘數爲0101,商仍爲0,即當將信息碼與多項式相模後所得=的商爲1 0000;這時候在信息碼後補4個0計算4位校驗碼:右移一位,餘數是1010,商爲1,餘數爲111(沒有借位);再右移一位,餘數是1110,商爲1,餘數爲0011;右移一位,商爲0,餘數0110;最後右移一位,餘數爲1100,商爲1,最終餘數爲0001.
故算的商爲1 0000 1101,確定的校驗碼爲0001
注:此題因爲隨意選擇數值,導致其多項式沒有選對,使得在數據出錯過程無法校正,但解題思路無誤;多項式的選擇應滿足:最高位和最低位爲1;當CRC碼的任何一位出錯時,做除應使餘數不爲0;不同爲出錯時,餘數應不同;對餘數作除應能使餘數構成循環
即一個數在計算機中的二進制表現形式。機器數是帶符號的,故將對應的數值稱爲機器數的真值。例:0001和1001對應的真值分別是+1和-1
當將符號和數值一起編碼存放時,表示的方法爲原碼、反碼、補碼、移碼:
理解原碼與真值的區別:一個十進制的數+15,則在計算機中的二進制表現形式——真值:+1111,那麼原碼就是:01111;同理-15(真值-10) -> -1111(機器數) ->1 1111(原)
注意:根據定義 0 0000 和 1 0000 是兩種不同的表示,雖然都是0 (+0 -0)
例:+15.5(d) –> 0 1111.1(原) -> 0 1111.1(反);-15.5(d) –> 1 1111.1(原)->1 0000.0(反)
同理真值0的反碼也有兩種表示:+0(真值) ->0 0.0(反);-0(真值) ->1 1.1(反)
例:+15.5(d) –> 0 1111.1(原) -> 0 1111.1(反)->0 1111.1(補);-15.5(d) –>
1 1111.1(原)->1 0000.0(反)-> 1 0000.0(反) +1 = 1 0001.0(補) -> 再次取反1 1110.1(補的反碼) ->1 1110.1(補的反碼) +1 = 1 1111.1(原)得到原碼(負數的補碼取反碼+1就是原碼)
例:+15(真)-> 0 1111(補) ->1 1111(移);-15(真)-> 1 0001(補) ->0 0001(移)
補:階碼:用於表示小數(浮點數N=2^E ´ M)的階數E,用移碼錶示,其偏置量根據浮點數類型的不同而不同,如短浮點數中 (總位數爲32位,包括1位符號位,8位階碼,23位的尾數M) 規定階碼爲8位,故偏置量爲127
例:-100(真)-> - 110 0100(機器數),即-1.1001´26(小數點左移6位),該數的符號位爲1,M(即尾數)爲1100 1;確定階碼:階數E爲6,符號位爲0,若按短浮點規定,階碼爲0 000 0110 (6) + 127(0111 1111) = 128 + 5 = 1 000 0101,則該數-100以短浮點數編碼爲:1(符號位) 1 000 0101(階碼) 1100 1000 0……0(尾數,共23位)用十六進制保存爲C2E40000H。注:若階數爲負數:如此時階數爲-6,則階碼爲:1 111 1010(-6的補碼) + 0111 1111 = 0 111 1001 = 127-6 = 121.