1、
#include <iostream>
using std::cout;
using std::endl;
int main()
{
int x=99999;
int count = 0;
while(x)
{
x=x&(x-1);
count++;
cout <<"x= "<< x <<endl;
}
cout <<"count = "<< count<< endl;
return 0;
}
请问这里输出的count值是________
答案:10
上题目中的x值依次是:
99998
99996
99992
99984
99968
99840
99328
98304
65536
0
问题分析:99999的二进制码是1 1000 0110 1001 1111,其中1的个数决定了循环的次数,由于&的关系,每次x&(x-1)将消去二进制数后面的一个1.
共有10个1,因此有10次循环
2、
#define MIN(a,b) (a < b) ? a :b
int x=MIN(3+2,5+6)*2;
cout << "x =" << x <<endl;
上面的程序代码中,输出的x的值是______
准确的写法应该是__________________________
答案:
输出的x值是:5
原因是调用宏定义时,结果为:3+2<5+5 ? 2+3 : 5+6*2
分析运算符优先级可知道,3+2<5+6为真,输出2+3,即是5
正确的宏定义应该这样写:#define MIN(a,b) ( ((a)<(b)) ? (a) :(b))
3、
int x = 5;
int a = x ;
a += (a = 8);
cout << a <<endl;
请问输出a的值是______
答案:16
a += (a = 8);此处语句使得a=8,此处的值为8,然后就相当于a+=8;
所以a的值是16