最近在网上看到一个获取数字中1的个数的算法,感觉很有用,就记录下来:
/*
基本思路:
从低位往高位计数,利用逻辑与&特征,相同为0,不同为1,
将 i 与 i - 1进行 & 运算,这样每次可以计算一个低位,同时有往高位递归
*/
int get_number_1_count(int i)
{
int count = 0;
while(i)
{
//i 不为0,说明有1,计数++
++count;
//重置低位为0, 得到高位
i = i & (i - 1);
}
return count;
}