首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算奇偶校验

计算奇偶校验
EN

Stack Overflow用户
提问于 2013-06-28 02:43:41
回答 1查看 12.6K关注 0票数 11

我不完全理解这个计算奇偶校验位的算法。有没有人能详细解释一下?

以下代码摘自“黑客的快乐”一书:

代码语言:javascript
复制
int parity(unsigned x) {
   unsigned y;
   y = x ^ (x >> 1);
   y = y ^ (y >> 2);
   y = y ^ (y >> 4);
   y = y ^ (y >> 8);
   y = y ^ (y >>16);
   return y & 1;
}
EN

回答 1

Stack Overflow用户

发布于 2013-06-28 02:59:24

如果x只有1位,显然((x ^ (x >> 1)) & 1会计算奇偶校验(只是将这些位彼此进行异或)。

该模式可以扩展到更多的位。

如果你有4位,你会得到(至少,这是一种方法)

代码语言:javascript
复制
y = x ^ (x >> 1);
y = y ^ (y >> 2);
return y & 1;

其中位执行此操作:

代码语言:javascript
复制
x = a     b     c     d
y = a   a^b   b^c    c^d
y = a  a^b  a^b^c  a^b^c^d

如果将模式一直扩展到32位,就会得到问题中显示的代码。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17350906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档