1. 程式人生 > 其它 >進位制與編碼

進位制與編碼

進位制以及轉換

計算機內部的資料都是使用二進位制來表示的

進位計數發: 是一種常規使用的技術方法,生活中最常用的是十進位制的計數法;
每個數位用到的不同的數碼叫做基數,十進位制的基數就是10,逢十進一; 

常用的進位制數目:
二進位制,八進位制,十六進位制;其中十六進位制除了09以外分別用A,B,C,D,E,F表示1015

進位制之間的轉換
  1. 4,8,16 等與2進位制轉換
    2 進位制 -> 8 進位制 : 將3個二進位制的位數轉換成一個8進位制的數;高位補0

2 進位制 -> 16 進位制 : 將4個二進位制的位數轉換成一個16進位制的數; 高位補0

任意進位制轉化成10進位制,將各個數碼和他們的權值相乘,然後再把乘積相加就得到了一個十進位制的數。這就是按權展開相加

二進位制在計算機內部的應用:
真值和機器數: 真值就是實際的數值,機器數就是真值在計算機內的表示

1. 原碼 正數就是真值的二進位制碼
2. 反碼 除了符號位,全部取反
3. 補碼 正數不變,負值在上述反碼的基礎上+1 
4. 移碼  其表示形式與補碼相似,只是其符號位用 “1” 表示正數,用 “0” 表示負數,數值部分與補碼相同  

字元以及編碼

BCD碼 - 二進位制編碼的十進位制數
使得二進位制和十進位制之間可以快速的轉換;

  1. 8421碼
    各個位置的權值8,4,2,1; 數值等與 8a1+4a2+2*a3 + a4

例如 1001 = 8+1=9;
相加的和大於這個範圍,加上6修正,並且像高位進位;

  1. 餘3碼
    這是一種無權碼,在8421碼的基礎上加上0011形成的,每個數都多餘3 例如8-> 1011, 9-> 1100

  2. 2421碼
    特點是大於5的部分,第二位最高位1,小於5的部分位0;

字串編碼 ASCII

計算機只能識別二進位制程式碼,所有的字元都是按照一定的規則和一組二進位制編碼對應起來表示的

國際上普遍採用的是7位二進位制的ASCII碼 可以表示10個10進位制數碼52個英文大小寫字母和一定數量的專用符號!等128個字元;

0~31 是控制字元
32是空格
32-126是可印刷字型 

用到了8bit,但是第一個位元位永遠都是0, 所以總數是127個8 bit= 1 Byte 所以是單位元組符號

詳細的對照便參考

ASCII

漢字的編碼

因為漢字的數目比較多,用兩個位元組來表示一個漢字
1981年GB2 - 1980 一共收集到了漢字3755個耳機漢字3008個 各種符號682個攻擊7445個
最新的漢字標準 GB8030 收錄了漢字27484個漢字,採用1B,2B,4B;

漢字的編碼包括 輸入編碼,漢字內碼,漢字字形碼3種; 分別用於計算機內部的 輸入,處理和輸出三種用途;
區位碼和國標碼的轉換

區位碼就是十進位制2位 94 * 94的矩陣

國標碼 = 區位碼16進位制 + 2020H

漢字內碼 = 國標碼16進位制 + 8080H

為了區分英語和漢字字元,最高位都改成1是;


校驗碼

校驗碼是指能夠發現或者自動糾正錯誤的資料編碼,也叫做檢錯糾錯編碼;

原理就是通過增加一些冗餘碼來檢驗或者糾錯編碼; 應用領域: 網路資料傳輸的 差錯控制部分

  1. 奇偶校驗碼:
    在原來的編碼上增加一個校驗位,碼距為2,可以檢測出一位(奇數位),不能檢測偶數的錯誤;
    可以發現錯誤但是不能糾正錯誤,不知道具體的錯誤位置;

例題理解: 給出兩個編碼的奇校驗碼 偶校驗碼

1001101 是7位數字 加上校驗碼使得所有的1為奇數所以四個加上1 11001101 , 偶數校驗01001101;

  1. 海明校驗碼 漢明校驗碼
    實際上是一種 多重 的奇偶校驗碼,原理就是在有效資訊位裡面加入校驗碼形成漢明碼;
    當某一個位數出錯的時候,會造成
    L - 1 = D + C ; D >= C ;

最小碼距 L 越大,檢測錯誤的位數D越大, 糾正錯誤位數C;

例如: n=4,k=3,求1010的海明碼;
(1)首先確定海明碼的位數: n為有效資訊為,k位校驗碼,
n + k <= pow(2,K) -1 , 1010 為4位;
4 + 3 <= 8 -1
所以一共是7位
(2)校驗碼的位置都處2的power; 1, 2 , 4
(3) 分組形成校驗關係
第三個位上數字由 P1 P2 矯正
第5 有P1 P3矯正
第6 有P2 P3矯正
第7 有P1 P2 P3矯正
D4,D3,D2,P3,D1,P2,P1
P1 = D1 XOR D2 XOR D4 = 0 1 1 = 0
P2 = D1 XOR D3 XOR D4 = 0 0 1 = 1
P3 = D2 XOR D3 XOR D4 = 1 0 1 = 0

校驗的時候
S1=P1 XOR D1 XOR D2 XOR D4 = 0 表示校驗碼一致;
S1S2S3=000 表示無錯,如果不是的話就可以發現糾錯的目的,找到錯誤的地方 直接取反;

迴圈冗餘校驗碼 CRC碼

在K位資訊嗎後再拼接R位的校驗碼,整個編碼的長度位N位;因此這個編碼又叫做NK碼

CRC基於線性編碼的理論再發送端,將傳送的二進位制訊息想左移動R位,將它與生成多項式G(x)做模2除法;
如果無錯就是整除,其中生成的多項式和接受的編碼是一個約定

例如G(X)的最高整數位位R則對應的二進位制數有R+1位。

例如: G(x)=x^3 + x^2 + 1; 資訊碼位101001 求對應的CRC碼:
R=3 K=6 N=6+3=9
101001000 MOD 1101 = 001
計算的結果CRC碼為: 101001001