软考2019-计算机系统知识(数据校验码)

版权声明:不自见故明;不自是故彰;不自伐故有功;不自矜故长; https://blog.csdn.net/LightUpHeaven/article/details/85037156

计算机中的数据在进行存储和传输的过程中可能会发生错误。为了及时发现和旧账这类错误,在数据传输过程中要进行校验,也就是在传输的数据中增加数据校验码。

数据校验码是具有发现某些错误或具有自动纠错能力的数据编码,最常用的是奇偶校验码。

码距,是指在一个编码系统中任意两个合法编码(码字)之间不同的二进制位数。

1.奇偶校验码。

只能检测代码中奇数位出错的编码,但不能发现偶数位出错的情况。

奇数+奇数=偶数;偶数+奇数=奇数;偶数+偶数= 偶数。

2.海明码。

海明码的校验码的位置必须是在2的n次幂位置(n从0开始,分别代表从左边数起分别是第1、2、4、8、16。。。),信息码也就是在非2的n次幂位置

假设数据位为n位,校验位是k位,则n和k必须满足以下关系:

2的k次幂>=n+k+1

这里其实n已经限制了k的取值最大范围。

假如求信息1011的海明码,我们参考上面的图克制,1,2,4都是校验位,那么1011分别排在7,6,5,3上面:

其中I4=1,I3=0,I2=1,I1=1,

那么r2,r1,r0该怎么求呢?

I4在第7位可以拆解为 2的2次幂+2的1次幂+2的0次幂

I3在第6位可以拆解为 2的2次幂+2的1次幂

I2在第5位可以拆解为 2的2次幂+2的0次幂

I1在第3位可以拆解为 2的1次幂+2的0次幂

r0的值=I4^I2^I1,为什么这么算呢?看看I4拆分成的数中,有没有包含==该校验位位数的数,有的话就加入进来,^的意思是异或,相同为0,不同为1,根据这规则

r0=1,

同理r1=I4^I3^I1 结果=0,

r2=I4^I3^I2 结果=0

所以最后的结果为1010101

其实这里的r0,r1,r2是其中的一种表示方法,还有别的表示方法,如:

R1,R4,R8,包括怎么校验,因为这篇只是为准备软考而做的笔记,就不详细阐述了。

3.循环冗余检验码(Cyclic Redundancy Check)

例题:采用CRC进行差错校验,生成多项式为G(X)=X4次幂+X+1,信息码为10111,则计算出的CRC校验码为:

步骤:

1.化解多项式 为10011

2.信息码加0做模2加运算(不进位加法)(补多少0呢?除数的位数-1)

3.得到的余数即为校验码 (一定比除数少1位,即使前面是0也要带着)

猜你喜欢

转载自blog.csdn.net/LightUpHeaven/article/details/85037156
今日推荐