这种方法速度比较快,其运算次数与输入n的大小无关,只与n中1的个数有关。如果n的二进制表示中有k个1,那么这个方法只需要循环k次即可。其原理是不断清除n的二进制表示中最右边的1或者最左边的1,同时累加计数器,直至n为0
如7(0111)
通过与 7-1 (0110)与操作消去最最左边的1,并累加计数器
7(0111)& 7-1 (0110) = 6 (0110)
再将 6 (0110) 与 6-1(0101)与操作消去最右边的1,并累加计数器
6(0110)& 5(0101) = 4(0100)
直至结果为0
算法实现如下
int BitCount2(unsigned int n)
{
unsigned int c = 0 ;
for (c = 0; n; ++c)
{
n &= (n - 1) ; // 清除最低位的1
}
return c ;
}
本文介绍了一种高效算法,用于计算整数二进制表示中1的个数,该算法仅与二进制中1的数量有关,不受整数大小的影响。通过对整数进行位操作,不断清除最右侧的1并累加计数,直至整数变为0。
793

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



