求下列代码输出结果 求下列代码输出结果

来源:百度知道 编辑:UC知道 时间:2024/06/30 14:24:40
int func(int x)
{
Int countx = 0;
While(x)
{
Countx ++;
X = x&(x - 1);
}
Return countx;
}
main()
{
Printf(“%d”,func(99));
}
为什么啊?

正确答案是4
99的二进制是1100011,减一与自己做与运算的话应该是
1100011
1100010
--------
1100010=98,此时countx=1
再减一与自己做与运算的话应该是
1100010
1100001
--------
1100000=96,此时countx=2
再减一与自己做与运算的话应该是
1100000
1011111
--------
1000000=64,此时countx=3

再减一与自己做与运算的话应该是
1000000
0111111
--------
0000000=0,此时countx=4,而X的值变为0,满足循环条件退出。func()返回countx的值为4,main()主函数输出为4.
LZ可以用编译器自己编译运行一下,结果应该是4,因为我已经编译运行过了,-_-!

99

输出结果是4
主函数只是调用了func()函数。
函数循环体中x&(x-1)是x与x-1的二进制按位“与”操作。x值为99,二进制表示为1100011,循环过程为:
1.countx=1,x=1100011&1100010=1100010,x为真,循环继续;
2.countx=2,x=1100010&1100001=1100000,x为真,循环继续;
3.countx=3,x=1100000&1011111=1000000,x为真,循环继续;
4.countx=4,x=1000000&0111111=0000000,x=0为假,退出循环。
到此为止,countx值为4.