如何检查值是否具有偶校验或奇校验?

问题描述 投票:11回答:9

如果值具有偶数的1位,则它具有偶校验。如果值的奇数为1位,则它具有奇校验。例如,0110具有偶数奇偶校验,而1110具有奇数奇偶校验。

如果1具有偶校验,我必须返回x。>

int has_even_parity(unsigned int x) {
    return 
}

如果值具有偶数的1位,则它具有偶校验。如果值的奇数为1位,则它具有奇校验。例如,0110具有偶数奇偶校验,而1110具有奇数奇偶校验。我必须返回...

c bits
9个回答
5
投票

尝试:


64
投票
x ^= x >> 16;
x ^= x >> 8;
x ^= x >> 4;
x ^= x >> 2;
x ^= x >> 1;
return (~x) & 1;

6
投票
直接从Bit Twiddling Hacks By Sean Eron Anderson, [email protected]毫无疑问地得出以下答案

5
投票
GCC为此具有built-in function

1
投票
主要思想是这样。通过使用x & ( x - 1 )将最右边的“ 1”位置1。假设x = 13(1101)并且x & ( x - 1 )的运算是1101 & 1100,即1100,请注意,最右边的设置位转换为0

1
投票
概括@TypelA对任何体系结构的答案:

0
投票
int parity_check(unsigned x) { int parity = 0; while(x != 0) { parity ^= x; x >>= 1; } return (parity & 0x1); }

0
投票
这里是一个

单行#define


-3
投票
这是一个很老的问题,但我发布给以后可能使用它的人。
© www.soinside.com 2019 - 2024. All rights reserved.