函数
int f(unsigned int n) { unsigned int m = 0; for (m = 0; n; ++m) { n &= (n - 1); } return m; }
f(2486)的返回值是()
比较完整的答案:
//求二进制数 1 的个数
int numOfOne(x){
int count = 0;
while(x)
{count++;
x = x&(x-1); }return count;
}
//那么求二进制中 0 的个数呢?好的,以下就是:
int numOfZero(x) while(x+1) {count++; x = x|(x+1); }return count; } 这道题求的时候也有技巧,一般都要先转化成16进制,再转化成二进制, 那么这里 2486 = 2048 + 438(没骂人^()^),已知2048 = 2^n, n管他是多少,也就是说2048中只有一个1,第一个。 所以只需要求438中1的个数再加上1,就是总1的个数。 做题中的一点小悟,逐享之。