int func(int x)
{
int countx = 0;
while(x)
{
countx ++;
x = x&(x-1);
}
return countx;
}
如何只数'1'的个数?如果一个数字至少包含一个'1'位,那么这个数字减1将从最低位开始依次向高位借位,直到遇到第一个不为'0'的位。依次借位使得经过的位由原来的'0'变为'1',而第一个遇到的那个'1'位则被借位变为'0'。
比如说 10100 为20
第一次 20&(20-1) 事实上 20-1 相当于 从低位开始依次向高位借位 当遇到第一个1时 则 1为0 后面的0变为1 当 20和20-1相并后,事实上是消掉了最后一个1 一次这样下去 直到所有的1 消除 这样就统计出来有多少个1了
计数二进制中1的个数
本文介绍了一种高效的方法来计算一个整数中1的个数,通过位操作逐步消除最低位的1,直至所有1都被计数。
1221

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



