标签:
转自 :http://blog.csdn.net/yudandan10/article/details/11878421
计算机组成中的海明校验码,相信学过的都会有了解,那么对其中校验位的确定,我想似乎有些人不是很明白,今天我来详细的把如何确定校验位分享一下
首先看下基本的概念 :
2^r≥k+r+1
其中r为校验位 ,k为信息位 信息位是已知的,那么如何确定校验位呢,用一个例子来说明
例如:二进制码1011 求它的海明编码 步骤如下:
1、首先确定信息位,也就是1011了,那么随之K的长度也就知道了是4位
2、确定校验码是几位 根据上述公式我们去试最接近而且满足条件的值,1011的校验位是3,也就是r=3,这样刚好满足了条件
3、确定了校验位的位数之后就是来确定校验位的值以及分配校验位了
首先来看分配校验位: 一般来说校验位都是放在2^n的位置处,也就是1、2、4、8....
其次就是确定分组(也就是确定校验位的值)
通过初步的解题我们知道了校验位+信息位一共是7位,那么我们首先来画一个表,分别把这些数据填进去
注释: 我分别把七个位置用1~7来表示了 在填写信息为的时候也要把高位的数据填到高的位置 ,例如1011 就要类似图中的填法
确定校验位的分组原则:
1.每个位置的校验位确定: 要想校验第几位 (i) 那么i就等于校验位所在位置的加和 举个简单的例子,加入我要教研第3位,那么3=1+2 也就是3 由第一个和第二个校验位来校验,照这样的算法,以此类推,我们就可以知道每个位置都需要哪个校验位来校验了
下面是1011的校验位分配表
按上述方法分配好后,我们已经明确的知道了每个位置都需要利用哪些位置来校验,下面也是关键的一步了
我们要把这些数据汇总起来,也就是每个校验位都校验了哪些位置,就分别把这些位置的值按亦或计算(也就是相同的值就为0 ,不相同时就取1) 这样就得到了每个校验位的值了
下面我们来看看,每个校验位都分别校验了哪些位置 :
由此表可以看出对于校验位所要校验的位置,已经确定了,余下的就是计算检验位的值了,(利用亦或运算)
可得到r1 r2 r3 的值分别为 1,0,0 (如果此处你不会亦或运算,那么建议百度查一查,练习一个简单的例子就会和明白了)
到此位置,我们就求出了校验位的值,同时海明码也就出来了
那么对于海明码的验证纠错等知识我就不在这里介绍了,以上就是我对此部分知识的理解,欢迎交流学习
标签:
原文地址:http://www.cnblogs.com/acpb/p/5397858.html