奇偶校验算法

 

算法来源:互联网

功能描述::

    大家都知道,信息是以比特流的方式传输的,类似01000001。在传输过程中,有可能会发生错误,比如,我们存储了01000001,但是取出来却是01000000,即低位由0变成了1。为了检测到这种错误,我们可以通过“奇偶校验”来实现。假如,我们存储的数据是一个字节,8个比特位,那我们就可以计算每个字节比特位是1的个数,如果是偶数个1,那么,我们就把第九个位设为1,如果是奇数个1,那么就把第九个位设为0,这样连续9个字节比特位为1的位数肯定是奇数。这中方法叫做“奇校验”,“偶校验”和此类似。当然,在实际应用中,也可以把一个字节的前7位作为数据位,最后一个为作为校验位。

算法思路:

    总体就是把信息的所有为1的比特位集中起来,看看到底是有奇数个还是偶数个。我们可以通过“逻辑右移”和“异或”运算来实现。

例如,我们可以把信息用二进制的方式表示出来,A=(an … a1a02

1、初始化,设置辅助变量 s , 令 s = n, s = s / 2;

2、 A = A ^(A >> s)。

3、如果 s = 1 ,求 A & 1 ,结束算法;否则,s = s/2 , 继续第二步。

 

unsigned parity(unsigned arg)
{
unsigned a = arg;

a ^= a >> 16;
a ^= a >> 8;
a ^= a >> 4;
a ^= a >> 2;
a ^= a >> 1;

return a & 1;
} 

阅读更多
文章标签: 算法 存储 互联网
个人分类: 算法分析与设计
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭