第三题:
下面代码printf打印的结果是多少?
#include <stdio.h>
int main()
{
int n = 9999;
int nCount = 0;
while (n)
{
nCount++;
n = n & (n - 1);
}
printf("%d\n", nCount);
return 0;
}
运行结果:
PS:仔细看那个while循环里面的操作,其实它在完成一件事情,就是求n转换为二进制之后1的数目,9999转换为二进制位0010 0111 0000 1111,可以清楚的看到有8个1,最后结果为8。
第四题:
下面代码printf打印的a和x值分别是多少?
#include <stdio.h>
int main()
{
int a, x;
for (a = 0, x = 0; a <= 1 && !x++; a++)
{
a++;
}
printf("a=%d\n", a);
printf("x=%d\n", x);
return 0;
}
运行结果:
PS:对于这个题目了解for循环的执行顺序,然后就是!x++,先执行!x=1此处并不改变x的值,然后执行的x++把x的值改成1。