编码的概念
-
用若干位码元按一定规律排序起来表示给定信息的过程称之为
编码
- 直观理解: 使用一组数组合来代表一种信息叫做编码
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)