跪求大神。有道微软的面试题怎么做,

int func(x)

{

int countx = 0;

while(x)

{

      countx ++;

      x = x&(x-1);

 }

return countx;

}
x=x&(x-1);

x=x&(x-1);的结果就是x=0
func函数的返回值不是0就是1

计算x中1的个数,,,,

& 是 位 与 运算,这个func的目的就是计算x的二进制表示有多少个1.例如:101B & 100B = 100B 100B & 011B = 0
因此5(101B)的二进制表示有两个1

他们问的是什么?
这道题还真有点意思~

二进制的个数,答案为:8

问的是x的二进制中哟多少个1