写在前面:
本系列文章用于记录本人软考学习历程,适用于零基础人群,每天不定期更新,如果读者哪里不理解或者发现哪里理解的有问题,欢迎评论,一起进步学习,祝大家都能顺利通过考试~
第四节 校验码
本为了确保计算机系统运行时各个部件之间进行数据传送的时候正确无误,一般有两种办法:一是提高硬件电路的可靠性,二是提高代码的校验能力(查错和纠错)。通常使用的方法是校验码。
基本思想:把可能出现的编码分为两类,合法编码和错误编码。
合法编码用于传送数据
错误编码不允许在数据中出现。
合理的设计错误编码以及编码规则,使得数据在传送中出现某种错误时会变成错误编码,这样就可以检测出接收到的数据是否有错。
这里需要解释一个关键性的名词,码距。
码距:指的是一个编码系统中任意两个合法编码之间至少有多少个二进制位不同。
例如 0000 0001 之间码距为1 0110 1011 之间码距为3
3中常用的校验码:奇偶校验码、海明码、循环冗余校验码。
- 奇偶校验码
通过在编码中增加一位校验位来使编码中1的个数为奇数(奇校验)或者为偶数(偶校验),从而使码距变为2。
对于奇校验,可以检测代码中奇数位出错的编码,但不能发现偶数位。
奇性也就是模二运算后得到1,偶性反之。(模二运算就是所有位依次相加,进行二进制运算,不进位,最后得到0或者1)
- 海明码
海明码是一种多重奇偶检错系统。它将信息用逻辑形式编码,一遍能够检错和纠错。用在海明码中的全部传入码字是由原来的信息和附加的奇偶校验组成的。每一个这种奇偶位被编在传输码字的特定位置上。
需要死记得公式: 2k-1>= n + k(注:前面为2的K次方,并不是2乘以K)
其中,k代表检验位数,n代表数据位
校验位占得位置为Pi,那么他的位置为海明码中的第2的i-1次方的位置,举个例子:
校验位P1在海明码中的位置就是1
校验位P2在海明码中的位置就是2
校验位P3在海明码中的位置就是4
校验位P4在海明码中的位置就是8
假设数据位是8位,需要4个校验位,那么组成的海明码就是
H12 H11 H10 H9 H8 H7 H6 H5 H4 H3 H2 H1 --这行代表海明码
D7 D6 D5 D4 P4 D3 D2 D1 P3 D0 P2 P1 --这行代表组成海明码的元素,由4个校验位和8个数据位组成
来看一道例题深入了解一下海明码:
例题:设数据为01101001,试采用4个校验位来求其偶校验方式的海明码。
解:由题得到所有数据为为D7D6 D5D4D3D2D1D0 = 01101001
根据海明码中的对应关系(被校验的海明位的下标等于所有参与校验该位的校验位的下标之和,校验位由自身校验)推导出各校验位的计算公式:
P1 = D0 ⊕ D1 ⊕ D3 ⊕ D4 ⊕ D6 = 1 ⊕ 0 ⊕ 1 ⊕ 0 ⊕ 1 = 1
P2 = D0 ⊕ D2 ⊕ D3 ⊕ D5 ⊕ D6 = 1 ⊕ 0 ⊕ 1 ⊕ 1 ⊕ 1 = 0
P3 = D1 ⊕ D2 ⊕ D3 ⊕ D7 = 0 ⊕ 0 ⊕ 1 ⊕ 0 = 1
P4 = D4 ⊕ D5 ⊕ D6 ⊕ D7 = 0 ⊕ 1 ⊕ 1 ⊕ 0 = 0
求得的海明码为:
H12 H11 H10 H9 H8 H7 H6 H5 H4 H3 H2 H1
D7 D6 D5 D4 P4 D3 D2 D1 P3 D0 P2 P1
0 1 1 0 0 1 0 0 1 1 0 1
- 循环冗余校验码