C Programming - Expressions - Discussion
Discussion Forum : Expressions - Find Output of Program (Q.No. 3)
3.
What will be the output of the program?
#include<stdio.h>
int main()
{
int i=-3, j=2, k=0, m;
m = ++i || ++j && ++k;
printf("%d, %d, %d, %d\n", i, j, k, m);
return 0;
}
Answer: Option
Explanation:
Step 1: int i=-3, j=2, k=0, m; here variable i, j, k, m are declared as an integer type and variable i, j, k are initialized to -3, 2, 0 respectively.
Step 2: m = ++i || ++j && ++k; here (++j && ++k;) this code will not get executed because ++i has non-zero value.
becomes m = -2 || ++j && ++k;
becomes m = TRUE || ++j && ++k; Hence this statement becomes TRUE. So it returns '1'(one). Hence m=1.
Step 3: printf("%d, %d, %d, %d\n", i, j, k, m); In the previous step the value of variable 'i' only increemented by '1'(one). The variable j,k are not increemented.
Hence the output is "-2, 2, 0, 1".
Discussion:
41 comments Page 3 of 5.
Poonam tiwari said:
1 decade ago
Yes I have same question, why && operator is not evaluated first while it has higher priority then || operator?
Vivek said:
1 decade ago
{
int a=10,b=2,c;
a=!(c=c==c)&&++b;
printf("%d",b);
}
Why value of b is 2? Not 3 but if we replace && by || b is 3?
int a=10,b=2,c;
a=!(c=c==c)&&++b;
printf("%d",b);
}
Why value of b is 2? Not 3 but if we replace && by || b is 3?
Divya joshi said:
1 decade ago
What is compiler optimization?
Wiley said:
1 decade ago
Precedence of logical operators,
1. ! Logical NOT.
2. && Logical AND.
3. || Logical OR.
No matter of associativity since the expression contain operators of different precedence.
I don't why it doesn't evaluate && expression since && has higher precedence than ||. I was wondering if someone could explain about this.
1. ! Logical NOT.
2. && Logical AND.
3. || Logical OR.
No matter of associativity since the expression contain operators of different precedence.
I don't why it doesn't evaluate && expression since && has higher precedence than ||. I was wondering if someone could explain about this.
Pratik said:
1 decade ago
Yeah @Anchal same confusion is being here.
Again according to precedence order first && should be evaluated.
Again according to precedence order first && should be evaluated.
Anchal said:
1 decade ago
I just want to know that arithmetic operator have high priority then logical then why we didn't increment all the values first.
Bruce Wayne said:
1 decade ago
@ANU.
What is compiler optimization? What should I do? study this as an odd case or will things like this happens with other operators too?
What is compiler optimization? What should I do? study this as an odd case or will things like this happens with other operators too?
Aditya Chauhan said:
1 decade ago
Precedence of logical operators,
1. ! Logical NOT
2. && Logical AND
3. || Logical OR
And associativity of Logical operators Left to Right.
So that,
m = ++i || ++j && ++k;
That's why (++j && ++k;) this code will not get executed.
1. ! Logical NOT
2. && Logical AND
3. || Logical OR
And associativity of Logical operators Left to Right.
So that,
m = ++i || ++j && ++k;
That's why (++j && ++k;) this code will not get executed.
THEPAIN said:
1 decade ago
@Anu Even Though according to the precedence rule the pre increment should be done first then its logical AND and at the end its logical OR this doesn't happen because of compiler optimisation. How to know about compiler optimization in solving problems. Like this.
Anup Kumar said:
1 decade ago
@Vijay.
Any non zero value in C is taken as true. Here -2 is true , So there is no need to check for 1 (which is true too) in case of an logical OR (||) operator. So m will receive a true, i.e 1 (value for true in C).
Any non zero value in C is taken as true. Here -2 is true , So there is no need to check for 1 (which is true too) in case of an logical OR (||) operator. So m will receive a true, i.e 1 (value for true in C).
Post your comments here:
Quick links
Quantitative Aptitude
Verbal (English)
Reasoning
Programming
Interview
Placement Papers