编码的概念
-
用若干位码元按一定规律排序起来表示给定信息的过程称之为
编码
- 直观理解: 使用一组数组合来代表一种信息叫做编码
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码
[egin{align} G_{n-1} =& B_{n-1} \ G_i =& B_{i+1} oplus B_i(i = 0, 1,2....n-2) end{align} ] -
Gray码转二进制数
-
[egin{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为负
-
其余各位为数值
-
代码位数称为
字长
,其数值称为真值
(类似数学上的绝对值)
[egin{equation}
left{
egin{array}{lr}
原码: 符号位+数值位 & \ \
反码: 正数和原码一样;负数符号位为1,数值按位取反 \ \
原码: 正数与0和原码一样,负数符号位为1,数值"取反加1" &
end{array}
ight.
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
-
或者也可以使用公式求补码:
[egin{equation} [N]_{补}=left{ egin{aligned} & N & 0 le N le 2^{n-1} \ & 2^n + N & -2^{n-1} le N < 0 end{aligned} quad (mod 2^n) ight. end{equation} ]- 例如求6的二进制(8位), 那么带入公式. 高位溢出, 保留8位.[egin{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 ]
-
-
补码 > 原码方法
[egin{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)