面试题积累(三)

题目10:Which of the following statements describe the results of executing the code sippet below in C++?

        

C/C++ code
int i = 1;
void main()
{
    int i = i;
}


A. The i within main will have an undefined value.

B. The i within main will have a value of 1.

C. The compiler will not allow this statement.

D. The i within main will have a value of 0.

分析:

       选 A,main()中的i与外面的i无关。是一个没有定义的值。


题目11:What does the following program print ?

#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; 
}


分析:

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

(2) x ==(y=z)的意思是说z赋值给y,然后看x和y相等否?无论相等不相等。x并未发生变化,仍然是10。

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

(4) x =(y&z)的意思是说首先使y和z按位与。y是3,z也是3。y的二进制数位是0011,z的二进制数位也是0011。

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

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

(6) x =(y|z) 的意思是说首先使y和z按位或。

y是4。z是3。

y的二进制数位是0100,z的二进制数位是0011。

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

(7) x =(y||z) 的意思是说首先使y和z进行或运算。

或运算是指假设y和z中有一个为真。则(y||z)为真,返回一个布尔值1。

这时y、z都是真,所以为真,返回1。

所以x为1。

     



原文地址:https://www.cnblogs.com/yutingliuyl/p/6936255.html