C | Operators | Question 10

What is the output of following program?

 `#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

Explanation: Let us understand the execution line by line.
Initial values of a and b are 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;
```

GeeksforGeeks has prepared a complete interview preparation course with premium videos, theory, practice problems, TA support and many more features. Please refer Placement 100 for details

My Personal Notes arrow_drop_up
Article Tags :
Practice Tags :

3

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.