想找一些有解析的笔试常见题型做练习,因为我始终认为没有解析的题没有一点做的必要,完全是耽误时间,找了半天发现有详细解析的并不多……找到这个程序员面试宝典,准备系统的看一下,一题一篇博客吧。今天第一题:
程序代码如下:
#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; system("pause"); return 0; }
分析:
x *= (y = z = 5);
这一句的意思是说将5赋值给z,再将z的值赋给y,然后将x与y的值相乘赋给x,所以x的值是2*5=10。
z = 3; x == (y = z);
这一句的意思是将z的值赋给y,这时候x和y的值都发生改变,x和y的值都为3,然后判断x是否跟y的值相等,但是无论相等与否x的值都不发生改变,仍为10.
x = (y == z);
这句是判断y和z的值是否相等,相等则返回一个bool值1,否则返回一个bool值0,因为y和z的值都为3,所以返回1,x=1.
x = (y & z);
将y和z进行每一位的与运算,11和11与运算之后得到11,所以x的值为3.
x = (y && z);
将y和z进行与运算,即且判断,如果x和y的值均为真,则返回1,因为y和z都是3,所以都为真,返回x=1.
y = 4; x = (y | z);
将y和z按位或,y为100,z为11,得到111,x=7.
x = (y || z);将y和z进行或运算,如果y和z中有一个为真,则返回1,因为y和z分别为4和3均大于0,所以均为真,返回x=1.
运行结果如下: