1、快速法
int BitCount2(unsigned int n)
{
unsigned int c =0 ;
while(n!=0)
{
n &= (n -1) ; // 清除最低位的1
c++;
}
return c ;
}
2、平行算法
int BitCount4(unsigned int n)
{
n = (n &0x55555555) + ((n >>1) &0x55555555) ; // n相邻位相加
n = (n &0x33333333) + ((n >>2) &0x33333333) ; // n(以2为单位)相邻位相加
n = (n &0x0f0f0f0f) + ((n >>4) &0x0f0f0f0f) ; // n(以4为单位)相邻位相加
n = (n &0x00ff00ff) + ((n >>8) &0x00ff00ff) ; // n(以8为单位)相邻位相加
n = (n &0x0000ffff) + ((n >>16) &0x0000ffff) ; // n(以16为单位)相邻位相加
return n ;
}
0x11530828的二进制表示如下:
0001 0001 1001 0011 0000 1000 0010 1000;
0 1 0 1 1 1 0 2 0 0 1 0 0 1 1 0;
1 1 2 2 0 1 1 1;
2 4 1 2
6 3
9