此代码如何计算数字的奇偶校验?

How does this code calculate the parity of a number?

本文关键字:数字 奇偶 偶校验 计算 代码 何计算      更新时间:2023-10-16

所以我应该找到一个奇偶校验的数字的奇偶校验,如果在给定数字的二进制表示中存在奇数个集合位,甚至其他方式。我有一个解决方案,但代码不是很好理解,因此正在寻找它的解释。

int y = x ^ (x >> 1); //given number is x.
y = y ^ (y >> 2); 
y = y ^ (y >> 4); 
y = y ^ (y >> 8); 
y = y ^ (y >> 16); 
// Rightmost bit of y holds the parity value 
// if (y&1) is 1 then parity is odd else even 
if (y & 1) 
return odd; 
return even;

这很简单。这是合并位以获得奇偶校验位的方式:

Bit numbers:
0    1    2    3    4    5    6   7
  /        /        /       /
01        23        45       56        x ^ (x >> 1)
      /                 /
    /                 /
0123                4567           y ^ (y >> 2);
              /
            /
          /
        /
01234567                   y ^ (y >> 4); 

简单地说,这棵树显示了如何有效地评估最年轻的位。 请注意,每一步都有额外的对,但它们对位没有影响,这是最终结果。