给定一个int变量,我想检查其二进制表示中的"1"数是偶数还是奇数.它可以用xor操作来制作
int n;
int s = 0;
for(;n;n>>=1)
s ^= (n&1);
Run Code Online (Sandbox Code Playgroud)
在C++中有一些更好的方法吗?
注意:我不是要求'1的数量,而是为了它的奇偶性,所以我认为可能有比我更好的代码.
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个数.
| 归档时间: |
|
| 查看次数: |
368 次 |
| 最近记录: |