例:n = 1110 1101; n-1 = 1110 1100
n&n-1 = 1110 1100
可以发现,当n&n-1的时候,得出来的数将n的最右边一位1消除了,如此重复,有几个一变循环几次,直到n = 0
int countof1(int n)
{
int count = 0;
while(n)
{
n = n&(n-1);
count++;
}
}
//相关问题,判断一个数是否是2的整数次方,,,2的整数次方只有一个1,例如 1000 0000
将其-1然后做&运算,其值会变为0;