C | Operators | Question 10

What is the output of following program?

filter_none

edit
close

play_arrow

link
brightness_4
code

#include <stdio.h>
  
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;
}

chevron_right


(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


Answer: (B)

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;


My Personal Notes arrow_drop_up


Article Tags :
Practice Tags :


Be the First to upvote.


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