我正在尝试查找位串的奇偶校验位,以便它返回1,如果x有奇数个0。
我只能用基本的位运算和我有什么迄今为止通过大多数测试,但我想知道两两件事:奇偶位数的位奇偶校验码
为什么χ^(X +〜1)工作?我偶然发现了这一点,但是如果有奇数位和其他的偶数,它似乎会给你1。像7^6 = 1,因为7 = 0b0111
这是解决这个问题的正确方向吗?我假设我的问题来自第一次操作,特别是(x +〜1),因为它会溢出某些2的补码数。由于
代码:
int bitParity(int x) {
int first = x^(x + ~1);
int second = first^1; // if first XOR gave 1 you'll return 0 here
int result = !!second;
return result;
}
你从哪里找到该算法? – rnunes
不使用'int',会有溢出,这是未定义的行为。使用'unsigned'和'1u'来代替,这里的环绕是明确的。 –
此算法不起作用。它的0至255 –