zoukankan      html  css  js  c++  java
  • 海明校验码

    原博地址: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  (如果此处你不会亦或运算,那么建议百度查一查,练习一个简单的例子就会和明白了) 

    到此位置,我们就求出了校验位的值,同时海明码也就出来了 

    保留:检1纠1 和检2纠1

  • 相关阅读:
    hdu 5366 简单递推
    hdu 5365 判断正方形
    hdu 3635 并查集
    hdu 4497 数论
    hdu5419 Victor and Toys
    hdu5426 Rikka with Game
    poj2074 Line of Sight
    hdu5425 Rikka with Tree II
    hdu5424 Rikka with Graph II
    poj1009 Edge Detection
  • 原文地址:https://www.cnblogs.com/verlen11/p/4354837.html
Copyright © 2011-2022 走看看