C++ 求返回值

来源:百度知道 编辑:UC知道 时间:2024/05/04 04:48:35
如下
int func(int x)
{
int countx = 0;
while(x)
{
countx ++;
x = x&(x-1);
}
return countx;
}

假设 x = 9999,返回8 (VS2005编译结果)
为什么呢?关键是x = x&(x-1); 是什么意思...
为什么是8呢?能不能解释下运算的过程.......
9999二进制是10011100001111吧...不会是我算错了呃?

楼上搞错了吧
&作为双目运算应该是按位与的意思
这个算法的作用就是数有几个1
我算错了。。。
算法每次从二进制中去掉一个1嘛

&是二进制运算符(我想你知道)。
举个例子:x = x&(x-1); (x=9999)
那么10011100001111&10011100001110=10011100001110
&的运算规则是,仅当对应位都为1时,结果为1,否则为0

具体为啥是8,估计是x做了八次后变成0了吧。

a&b
a且b
当a表达式不为0时为真
当b表达式不为0是为真
两个条件都为真 整个表达式就为真==1

这个运算是在2进制位上减1第一次把最后一位的1变成0然后是倒数第二位。。效果是按照-1-2-4-8-16的顺序一直减下去9999最后剩余8