一道考察赋值语句的面试题

#include <iostream> 
using namespace std; 
int main() 
{ 
int x=2,y,z; 
x*=(y=z=5); cout<<x<<end1; 
z=3; 
x==(y=z); cout<<x<<end1; 
x=(y==z); cout<<x<<end1; 
x=(y&z); cout<<x<<end1; 
x=(y&&z); cout<<x<<end1; 
y=4; 
x=(y|z); cout<<x<<end1; 
x=(y||z); cout<<x<<end1; 
return 0; 
}

面试题:What does the following program print?(下面程序的结果是多少?)


解析:

x*=(y=z=5)的意思是说5赋值给z,z再赋值给y,x=x*y,所以x为2*5=10.

x==(y=z)的意思是说z赋值给y,然后看x和y相等否?不管相等不相等,x并未发生变化,仍然是0.

x=(y==z)的意思是说首先看y和z相等否,相等则返回一个布尔值1,不相等则返回一个布尔值0.现在y和z是相等的,所以返回的布尔值是1,再把1赋值给x,所以x是1.

x=(y&z)的意思是首先使y和z按位与.y是3,z也是3.y的二进制数位是0011,z的二进制数位也是0011.按位与的结果如下表所示.

y0011
z0011
y&z0011

所以y&z的二进制数位仍是0011,也就是还是3.再赋值给x,所以x是3.

x=(y&&z)的意思是说首先使y和z进行与运算.与运算是指如果y为真,z为真,则(y&&z)为真,返回一个布尔值1.这时y与z都为3,所以为真,返回1,所以x为1.

x=(y|z)的意思是说使y和z按位或.y是4,z是3.y的二进制数位是0100,z的二进制数位是0011.与的结果如下表所示.

y0100
z0011
y|z0111

所以y|z的二进制数位是0111,也就是7.再赋值给x,x为7.

x=(y||z)的意思是说首先使y和z进行或运算.或运算是指如果y和z中有一个为真则为真,返回一个布尔值1.这时y和z都为真,所以为真,返回1.所以x为1.

答案:10,10,1,3,1,7,1.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值