求函数返回值,输入x=9999; int func ( x ) { int countx = 0; while ( x ) { countx ++; x = x&a

14 查阅

求函数返回值,输入x=9999;

int func ( x )

{

int countx = 0;

while ( x )

{

countx ++;

x = x&(x-1);

}

return countx;

}

结果呢?

参考答案:

正确答案:

\r\n

知道了这是统计9999的二进制数值中有多少个1的函数,且有
9999=9×1024+512+256+15

\r\n

9×1024中含有1的个数为2;
512中含有1的个数为1;
256中含有1的个数为1;
15中含有1的个数为4;
故共有1的个数为8,结果为8。
1000 - 1 = 0111,正好是原数取反。这就是原理。
用这种方法来求1的个数是很效率很高的。

函数