c/c++笔试题、面试题(一)(不断更新中)

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值