code:
#include<stdio.h> int main() { int a=-1,b=10,c; c=++a && ++b; printf("a=%d, b=%d, c=%d\n",a,b,c); return 0; }
Expected Output:
a=0, b=11, c=0
Coming Output:
a=0, b=10, c=0
Why this happen?
It happens because left to right associativity of this and when left operand is o it means false so in and it does not go to the right.
Let’s see another example:
#include<stdio.h> int main() { int a=5,b=10,c; c=++a && ++b; printf("a=%d, b=%d, c=%d\n",a,b,c); return 0; }
Output:
a=6, b=11, c=1
This is happening because left to right associativity and left one is true so it is also iterating to the right one.
For OR operation:
#include<stdio.h> int main() { int a=0,b=10,c; c=++a || ++b; //&& printf("a=%d, b=%d, c=%d\n",a,b,c); return 0; }
Output:
a=1, b=10, c=1
because in OR if left value is true then another in right will not be increment
Another example:
#include<stdio.h> int main() { int a=-1,b=10,c; c=++a || ++b; //&& printf("a=%d, b=%d, c=%d\n",a,b,c); return 0; }
Output:
a=0 b=11 c=1
here left value a is 0 that means it is false so another right value is incrementing and so b=11. and c is 1 as in or if one value is ture it is true.