当x=9999时,求函数的返回值是多少?
int fuc(unsigned int x)
{
int countx;
while(x)
{
countx++;
x = x&(x-1);
}
return countx;
}
这也是笔试中经常出现的一道题目。其实这道题实现的是统计数字二进制中1的个数。原理是 1000 - 1 = 0111 刚好进行了取反,相与之后就为0000。
同理分析一下输入为9999时:
首先进行分解 9999 = 9*1024+512+256+15 即0010 0111 0000 1111。故共有1的个数为8,返回值为8。
分析一下前两步,后面的步骤以此类推:
- x = 0010 0111 0000 1111 & 0010 0111 0000 1110 = 0010 0111 0000 1110
- x = 0010 0111 0000 1110 & 0010 0111 0000 1101 = 0010 0111 0000 1100