#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.按位与的结果如下表所示.
y | 0 | 0 | 1 | 1 |
z | 0 | 0 | 1 | 1 |
y&z | 0 | 0 | 1 | 1 |
所以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.与的结果如下表所示.
y | 0 | 1 | 0 | 0 |
z | 0 | 0 | 1 | 1 |
y|z | 0 | 1 | 1 | 1 |
所以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.