奇偶校验算法

原创 2011年10月10日 10:51:00
 

算法来源:互联网

功能描述::

    大家都知道,信息是以比特流的方式传输的,类似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;
} 

相关文章推荐

java 奇偶校验

java生成奇偶校验值: /** * 奇校验 * 就是让原有数据序列中(包括你要加上的一位)1的个数为奇数 * 1000110(0)你必须添0这样原来有3个1已经是奇数了所以你添上0之后1的个数还...
  • callsea
  • callsea
  • 2015年04月19日 00:07
  • 1969

Java实现CRC16CCITT算法

Java实现CRC16CCITT算法

SQL注入语句大全

1.判断有无注入点 ; and 1=1 and 1=2 2.猜表一般的表的名称无非是admin adminuser user pass password 等.. and 0 and ...
  • judyge
  • judyge
  • 2016年08月19日 15:24
  • 351

【CTF题】使用文件包含漏洞读取网页代码

【CTF题】使用文件包含漏洞读取网页代码按照我的理解文件包含漏洞是指网页后端php(或其他)代码中使用了include等文件包含语句,而且所包含的文件由变量控制,恰恰此变量又能通过GET或POST等方...

串口通信中数据的奇偶校验位算法

串口通信中数据的奇偶校验位算法 奇偶校验位是一个表示给定位数的二进制数中 1 的个数是奇数还是偶数的二进制数。奇偶校验位是最简单的错误检测码。奇偶校验位有两种类型:偶校验位与奇校验位。如果一组给定数...

IMSI编码规则与奇偶校验算法

在TS311.02中,介绍了IMSI的编码规则,其中涉及到奇偶校验算法。本文以此为引子,简单介绍奇偶校验的C算法,可作为C练习题的素材。...

串口通讯_奇偶校验

  • 2011年10月14日 09:38
  • 44KB
  • 下载

汇编语言实现 奇偶校验

  • 2009年12月30日 15:40
  • 450B
  • 下载

奇偶校验码

看操作系统时,“当主存的奇偶校验装置发现主存读写错误时”,表示不懂什么是“奇偶校验”, 以下来自http://www.elecfans.com/dianzichangshi/200910139633...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:奇偶校验算法
举报原因:
原因补充:

(最多只允许输入30个字)