📜  C |运营商|问题10

📅  最后修改于: 2021-05-28 05:51:13             🧑  作者: Mango

以下程序的输出是什么?

#include 
  
int main()
{
   int a = 1;
   int b = 1;
   int c = a || --b;
   int d = a-- && --b;
   printf("a = %d, b = %d, c = %d, d = %d", a, b, c, d);
   return 0;
}

(A) a = 0,b = 1,c = 1,d = 0
(B) a = 0,b = 0,c = 1,d = 0

(C) a = 1,b = 1,c = 1,d = 1
(D) a = 0,b = 0,c = 0,d = 0答案: (B)
说明:让我们逐行了解执行情况。
a和b的初始值为1。

// Since a is 1, the expression --b 
   // is not executed because
   // of the short-circuit property 
   // of logical or operator
   // So c becomes 1, a and b remain 1
   int c = a || --b;

   // The post decrement operator -- 
   // returns the old value in current expression 
   // and then updates the value. So the 
   // value of expression a-- is 1.  Since the 
   // first operand of logical and is 1, 
   // shortcircuiting doesn't happen here.  So 
   // the expression --b is executed and --b 
   // returns 0 because it is pre-increment.
   // The values of a and b become 0, and 
   // the value of d also becomes 0.
   int d = a-- && --b;

这个问题的测验