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了