int位奇偶校验解释

时间:2014-02-03 05:21:43

标签: c bit parity

我必须创建一个函数bitParity(int x),它取一个整数,如果x的位形式有一个奇数0,则返回1,否则返回0。

Ex:bitParity(5)= 0,bitParity(7)= 1 法律操作:! 〜& ^ | +<< >>

我的好友和我分享了他的代码,但是当我从头开始计算时,似乎与他得到的相反,有人可以稍微解释一下这段代码,以便我了解它是如何运作的?

int bitParity(int x) {
x = ( x >> 16 ) ^ x;
x = ( x >> 8 ) ^ x;
x = ( x >> 4 ) ^ x;
x = ( x >> 2 ) ^ x;
x = ( x >> 1 ) ^ x;

    return (x & 1);
}

1 个答案:

答案 0 :(得分:0)

此函数基本上xor输入数字的所有位并将其置于LSB,因此如果有1个奇数,则给出1

工作原理:

  • 输入8-bit,说11001001
  • 对于8-bit输入,您需要从第3个代码声明开始:x = ( x >> 4 ) ^ x;
  • 这样做(步骤1),你得到:

    x 7 x 6 x 5 x 4 x 7 ^ x 3 x 6 ^ x 2 x 5 ^ x 1 x 4 ^ X <子> 0

其中x i 表示ith的{​​{1}}位。

  • 现在第2步:x给出:

    在{{1}的LSB处,

    x 6 ^ x 2 ^ x 4 ^ x 0 },和 {{sub> 7 ^ x 3 ^ x 5 ^ x 1 位于x = ( x >> 2 ) ^ x;的{​​{1}} 1}}。休息位置无关紧要。

  • 第3步:x最终给出:

    X <子> 6 ^ X <子> 2 ^ X <子> 4 ^ X <子> 0 ^ X <子> 7 1的LSB处,sub> ^ x 3 ^ x 5 ^ x 1

  • 最后一步:x返回此表达式的值,x = ( x >> 1 ) ^ x;x的所有位return (x & 1);当{且仅当数字为xorx中的1 s是奇数。

  • 您可以将其扩展为1x16-bit个数字。

  • 此外,请注意找到奇数32-bit s相当于找到奇数64-bit s ,因为0的总数s和1加起来为偶数位。

  • 因此,上面的代码应该可以正常使用