原题简化:形参x转化成二进制后包含1的数量
int xMinus1(int x)
{
int count = 0;
while (x != 0)
{
count++;
x = x & (x - 1);
}
return count;
}
衍生问题
1. x-1修改为x+1后会怎样?
改成x+1后,该计算无实际意义。
当x为偶数时,x&(x+1)= x;
当x为奇数时,x&(x+1)会把x二进制中左数第一个0置为1,后面的1全置为0,前面不变。然后该数变为偶数,变成上一种情况。
2. 如何计算形参x转化成二进制后包含0的数量?
笨办法:先得出总位数,再减去上面的解。