赋值语句1

来源:互联网 发布:山东广电网络倒闭 编辑:程序博客网 时间:2024/05/10 03:20

What does the following program print?(中国台湾某著名计算机硬件公司2005年12月面试题)

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













解析:

x*=(y=z=5) 这句首先是5赋值给z,然后z再赋值给y,最后x=x*y 即2*5=10

x==(y=z) 首先z赋值给y,然后比较x和y是否相等。但是不管是否相等,x的值都未发生变化,仍然是10

x=(y==z) 首先判断y和z是否相等,由于相等所以返回布尔值1,然后再赋值给x,这时x值等于1

x=(y&z) 首先使y和z按位与,y与z的二进制都是0011。按位与后仍然是0011,然后再赋值给x,x值等于3

x=(y&&z) y与z先进行与运算,与运算是如果y,z都为真则结果为真,返回布尔值1.否则返回0,由于y,z都是3.所以为真,返回1,x=1

x=(y|z) y和z按位或,即对y和z的二进制数的每一位进行或运算,y和z的二进制数位分别为0100,0011。所以运算后的结构应为0111。x的值为7

x=(y||z) y和z进行或运算,然后再赋值给x。或运算是指如果y和z中有一个为真,结果即为真。因为y和z都为真,所以x值为1



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