編碼的概念
-
用若干位碼元按一定規律排序起來表示給定信息的過程稱之為
編碼
- 直觀理解: 使用一組數組合來代表一種信息叫做編碼
BCD碼(二 > 十進制編碼)
概念
- 用4位二進制數碼表示一位十進制數0~9十個狀態時,這些代碼成為
二 > 十進制
代碼, 簡稱BCD
(Binary Coded Decimal) - BCD碼需要4位二進制碼元,4位二進制碼有2^4 =16種組合, 但只用其中10種組合表示十進制數0~9.
編碼類型
-
BCD碼表
十進制 8421碼 5421碼 2421碼 余3碼 Gray碼 0 0000 0000 0000 0011 0000 1 0001 0001 0001 0100 0001 2 0010 0010 0010 0101 0011 3 0011 0011 0011 0110 0010 4 0100 0100 0100 0111 0110 5 0101 1000 1011 1000 0111 6 0110 1001 1100 1001 0101 7 0111 1010 1101 1010 0100 8 1000 1011 1110 1011 1100 9 1001 1100 1111 1100 1000 -
8421BCD碼:
- 有權BCD碼: 從左向右每一位的1分別代表
8
,4
,2
,1
.
- 有權BCD碼: 從左向右每一位的1分別代表
-
5421BCD碼
- 有權BCD碼,與8421BCD碼類似, 但加權方法不唯一.
-
2421BCD碼
-
有權BCD碼,但加權方法不唯一,
0-9
,1-8
,2-7
, ...4-5
互為反碼, 自補代碼. -
有
鏡像互補
特性十進制數 鏡像對比二進制數 鏡像對比二進制數 十進制數 0 0000 1111 9 1 0001 1110 8 2 0010 1101 7 3 0011 1100 6 4 0100 1011 5
-
-
余3碼
-
余3碼的數值比表示的十進制數(8421碼)多
3
,0-9
,1-8
,2-7
...4-5
互為反碼,自補代碼。 -
有
鏡像互補
特性十進制數 鏡像對比二進制數 鏡像對比二進制數 十進制數 0 0011 1100 9 1 0100 1011 8 2 0101 1010 7 3 0110 1001 6 4 0111 1000 5
-
可靠性編碼
Gary(格雷)碼
-
格雷碼規律
Gray碼的特性
反射性
: 按對稱軸方向,高位互補反射,低位鏡像對稱。單位距離性
: 任何相鄰的兩組代碼僅有一位數碼不同。循環性
: Gray表示的最大數和最小數之間也由單位距離性。
Gray碼為什么安全?
-
Gary碼在變化小,安全度則相對提高.
Gray與二進制數互轉
- 設有n位二進制數:
\[B_{n-1}B_{n-2}...B_0 \]
-
和n位Gray碼:
\[G_{n-1}G_{n-2}...G_0 \]-
二進制數轉Gray碼
\[\begin{align} G_{n-1} =& \ B_{n-1} \\ G_i =& \ B_{i+1} \oplus B_i(i = 0, 1,2....n-2) \end{align} \] -
Gray碼轉二進制數
-
\[\begin{align} B_{n-1} =& \ G_{n-1} \\ B_i =& \ B_{i+1} \oplus G_i(i = 0, 1, 2...n-2) \end{align} \]
快速寫出少數格雷碼
- 利用Gray碼的對稱性(缺少一張動圖)
奇偶校驗碼
-
奇偶校驗碼表
十進制數 8421BCD 奇校驗 8421BCD 偶校驗 0 0000 1 0000 0 1 0001 0 0001 1 2 0010 0 0010 1 3 0011 1 0011 0 4 0100 0 0100 1 5 0101 1 0101 0 6 0110 1 0110 0 7 0111 0 0111 1 8 1000 0 1000 1 9 1001 1 1001 0 位意義 信 息 位 校驗位 信 息 位 校驗位 -
奇校驗:使得一組代碼中信息位和校驗位中“1”的個數之和為奇數.
-
偶校驗:使得一組代碼中信息位和校驗位中“1”的個數之和為偶數.
奇偶校驗注意事項
- 奇偶校驗只能提高安全度,並不能保證一定安全.
- 假設發送了
0001
但出錯接收到的是0111
, 奇校驗依然是1,但錯了兩位.
字符編碼(ASCII 碼)
帶符號數的編碼
-
數字系統表示正負數(二進制)的一般(定點)方法
- 最高位作為符號位,0為正、1為負
-
其余各位為數值
-
代碼位數稱為
字長
,其數值稱為真值
(類似數學上的絕對值)
\[\begin{equation} \left\{ \begin{array}{lr} 原碼: 符號位+數值位 & \\ \\ 反碼: 正數和原碼一樣;負數符號位為1,數值按位取反 \\ \\ 原碼: 正數與0和原碼一樣,負數符號位為1,數值"取反加1" & \end{array} \right. \end{equation} \]
原碼
-
符號位
+數值位
-
例如:
\[N = (+54)_{10} = (+110110)_2 \qquad [N]_原 = 00110110 \\ N = (-54)_{10} = (-110110)_2 \qquad [N]_原 = 10110110 \]
反碼
- 正數反碼和原碼一樣; 負數符號位為, 數值
按位取反
\[N=(+42)_{10} =(+101010)_2 \qquad [N]_原 =00101010 \ [N]_反 =00101010 \\ N=(-42)_{10} =(-101010)_2 \qquad [N]_原 =10101010 \ [N]_反 =11010101 \]
補碼
-
正數補碼和原碼一樣, 負數符號位為1,數值
取反碼加1
-
或者也可以使用公式求補碼:
\[\begin{equation} [N]_{補}=\left\{ \begin{aligned} & N & 0 \le N \le 2^{n-1} \\ & 2^n + N & -2^{n-1} \le N < 0 \end{aligned} \quad (mod \ 2^n) \right. \end{equation} \]- 例如求6的二進制(8位), 那么帶入公式. 高位溢出, 保留8位.
\[\begin{align} n = 8 \ N = 6 \\ 2^n + N = 2^8 + 6 =& 262 \\ (262)_{10} =& (100000110)_2 \\ =& (00000110)_2 \end{align} \]
- 例如求6的二進制(8位), 那么帶入公式. 高位溢出, 保留8位.
-
例如(+6)10, (-5)10的4位和8位二進制補碼
位數/數值 原碼 補碼 4位 +6 0110 0110 -5 1101 1011 8位 +6 00000110 00000110 -5 10000101 11111011 -
注意無效位的擴展:11111011
-
也可以計算為:
\[2^8+(-5)=251=(11111011)_2 \]
-
-
補碼 > 原碼方法
\[\begin{align} 方法1:\quad & \{\{[X]_補\}\}_補 = [X]_原 \\ 方法2:\quad & 減一取反 \end{align} \] -
例如4位長補碼0011, 1011, 1000, 求出對應十進制數
補碼 原碼 十進制數 0011 0011 +3 1011 1101 -5 1000 無 -8 -
補碼和原碼/反碼表示的數值范圍不同(補碼無
-0
)4位 8位 n位 原碼 -7 ~ +7 -127 ~ +127 -(2^n-1) ~ +(2^n-1 - 1) 反碼 -7 ~ +7 -127 ~ +127 -(2^n-1) ~ +(2^n-1 - 1) 補碼 -8 ~ +7 -128 ~ +127 -(2^n-1) ~ +(2^n-1 - 1) -
補碼更適合帶符號二進制數的計算
- 計算機使用補碼可以把減法當加法算, 如:
A-B = A+(-B)
對於補碼而言是成立的
- 計算機使用補碼可以把減法當加法算, 如:
-
用4位二進制計算補碼加法計算(6-3)和(5+6)