在int变量中查找'1'的奇偶校验

Exo*_*odd 3 c++ binary int

给定一个int变量,我想检查其二进制表示中的"1"数是偶数还是奇数.它可以用xor操作来制作

int n; 
int s = 0;
for(;n;n>>=1)
    s ^= (n&1);
Run Code Online (Sandbox Code Playgroud)

在C++中有一些更好的方法吗?

注意:我不是要求'1的数量,而是为了它的奇偶性,所以我认为可能有比我更好的代码.

dev*_*fan 5

uint32_t v = somevalue;
v ^= v >> 1;
v ^= v >> 2;
v = (v & 0x11111111U) * 0x11111111U;
bool parity = (v >> 28) & 1;  
Run Code Online (Sandbox Code Playgroud)

来自https://graphics.stanford.edu/~seander/bithacks.html
它也有64位变体.

为了澄清,对于"奇偶校验",我并不是指数字是偶数还是奇数,而是如果它的二进制表示中的1位计数是偶数或奇数; 如https://en.wikipedia.org/wiki/Parity_bit中所述.有了数学意义,问题中的代码毫无意义,所以我认为OP意味着相同.该声明

我不是要求'1'的数量,而是要求它的平价

然后意味着他/她只想知道1个计数是偶数还是奇数,
而不是确切的1个数.