BCD码
十进制数用二进制编码的形式,通过专门的十进制数运算指令进行处理。计算机中有专门的逻辑线路在BCD码运算时使每4位二进制数按十进制进行处理。
每位十进制数的取值可以是0-9这十个数之一,因此,每一个十进制数位必须至少由4位二进制位来表示。而4位二进制位可以组合成16种状态,去掉10种状态后还有6种冗余状态,所以从16种状态中选取10种状态来表示十进制数位0-9的方法很多,可以产生多种BCD种。
8421码的映射关系:
4个二进制位 ------>16种不同的状态
BCD码值使用其中10种 ------>不同的映射方案
注:0000-1001分别对应0-9,进行加法后若超出该范围,则需+0110进行修正(强制向高位进1)
余3码:8421码+ ( 0011 ) 2 (0011)_2 (0011)2
2421码:改变权值定义
2、4、 2、 1分别对应,每一位的权值
表示0-4时最高位为0,表示5-9时最高位为1
奇偶校验码
几个简单的概念:
码字:由若干位代码组成的一个字
两个码字间的距离:将两个码字逐位进行对比,具有不同的位的个数
码距:一种编码方案可能有若干个合法码字,各合法码字间的最小距离
当码距d=1时,无检错能力;当d=2时,有检错能力;当d>=3,若设计合理,可能具有检错、纠错能力。
奇偶校验码
奇校验码:整个校验码(有效信息位和校验位)中“1”的个数为奇数
偶校验码:整个校验码(有效信息位和校验位)中“1”的个数为偶数
例:给出两个编码1001101和1010111的奇校验码和偶校验码。
设最高位为校验位,余7位是信息位,则对应的奇偶校验码为:
奇校验:11001101 01010111
偶校验:01001101 11010111
偶校验的硬件实现:各信息进行异或(模2加)运算,得到的结果即为偶校验位
⊕:异或(模2加)
0⊕0=0
0⊕1=1
1⊕0=1
1⊕1=0
求偶校验位:
1⊕0⊕0⊕1⊕1⊕0⊕1=0
1⊕0⊕1⊕0⊕1⊕1⊕1=1
进行偶校验(所有位进行异或,若结果为1说明出错):
0⊕1⊕0⊕0⊕1⊕1⊕0⊕1=0
海明校验码
偶校验:1010 ->01010,能发现奇数位错误,但无法确定是哪一位出错。
海明码设计思路:将信息位分组进行偶校验 ->多个校验位 ->多个校验位标注出错位置
信息位:n
校验位:k ------->2^k种状态
信息位+校验位:n+k
——————> 2^k>=n+k+1
其中n+k位中任何一位都可能出错,1表示1中正确状态
海明码求解步骤:
例:信息位:1010
1.确定海明码的位数:2^k>=n+k+1
n=4 ----> k=3
设信息位
D
4
D_4
D4
D
3
D_3
D3
D
2
D_2
D2
D
1
D_1
D1(1010),共4位,校验位
P
3
P_3
P3
P
2
P_2
P2
P
1
P_1
P1,共3位,对应的海明码为
H
7
H_7
H7
H
6
H_6
H6
H
5
H_5
H5
H
4
H_4
H4
H
3
H_3
H3
H
2
H_2
H2
H
1
H_1
H1
2.确定校验位的分布
校验位
P
i
P_i
Pi放在海明位号位2i-1 的位置上,信息位按顺序放在其余位置
3.求校验位的值
二进制:
H 3 H_3 H3:3 -->011
H 5 H_5 H5:5 -->101
H 6 H_6 H6:6 -->110
H 7 H_7 H7:7 -->111
将末尾为1的值进行偶校验:
P 1 P_1 P1= H 3 H_3 H3⊕ H 5 H_5 H5⊕ H 7 H_7 H7= D 1 D_1 D1⊕ D 2 D_2 D2⊕ D 4 D_4 D4=0⊕1⊕1=0
同理中间一位:
P 2 P_2 P2= H 3 H_3 H3⊕ H 6 H_6 H6⊕ H 7 H_7 H7= D 1 D_1 D1⊕ D 3 D_3 D3⊕ D 4 D_4 D4=0⊕0⊕1=1
第一位:
P 3 P_3 P3= H 5 H_5 H5⊕ H 6 H_6 H6⊕ H 7 H_7 H7= D 2 D_2 D2⊕ D 3 D_3 D3⊕ D 4 D_4 D4=1⊕0⊕1=0
4.纠错
对各个分组进行偶校验运算
校验方程:
S 1 S_1 S1= P 1 P_1 P1⊕ D 1 D_1 D1⊕ D 2 D_2 D2⊕ D 4 D_4 D4
S 2 S_2 S2= P 2 P_2 P2⊕ D 1 D_1 D1⊕ D 3 D_3 D3⊕ D 4 D_4 D4
S 3 S_3 S3= P 3 P_3 P3⊕ D 2 D_2 D2⊕ D 3 D_3 D3⊕ D 4 D_4 D4
接收到:1010010
S 1 S_1 S1= P 1 P_1 P1⊕ D 1 D_1 D1⊕ D 2 D_2 D2⊕ D 4 D_4 D4=0⊕0⊕1⊕1=0
S 2 S_2 S2= P 2 P_2 P2⊕ D 1 D_1 D1⊕ D 3 D_3 D3⊕ D 4 D_4 D4=1⊕0⊕0⊕1=0
S 3 S_3 S3= P 3 P_3 P3⊕ D 2 D_2 D2⊕ D 3 D_3 D3⊕ D 4 D_4 D4=0⊕1⊕0⊕1=0
海明码的检错、纠错能力:纠错——1位
检错——2位