比如求0 1 0 1 0 1 0 0 0 0
0 1 0 1 0 1 0 0 0 0 - 1 = 0 1 0 1 0 0 1 1 1 1
0 1 0 1 0 1 0 0 0 0
&
0 1 0 1 0 0 1 1 1 1
(val - 1) & val 从低位开始,直至第一位为1的这部份给清0了。
#include <stdio.h>
#include <stdlib.h>
int BitCount2(unsigned int val)
{
unsigned int c = 0 ;
for (c = 0; val; ++c)
{
val &= (val - 1) ; // 清除最低位的1
}
return c ;
}
int main()
{
printf("%d\n", BitCount2(0xfe));
}
//第2种方法int BitCount2(unsigned int val)
{
unsigned int c = 0 ;
while(val){
if(val & 1 == 1){
++c;
}
val >>= 1;
}
return c ;
}
本文介绍了一种使用位操作来计算整数中1的个数的方法。通过将数值与其减一后的值进行按位与运算,可以有效地清除最低位的1。此外,还提供了一个备选方法,通过逐位检查来实现相同的功能。
1010

被折叠的 条评论
为什么被折叠?



