比如求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 ;
}