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 2 of 5.
Vijaybhupathi said:
1 decade ago
If m=-2||1, then m=true=1; can any body justify it?
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).
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.
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.
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?
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.
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.
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.
Divya joshi said:
1 decade ago
What is compiler optimization?
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?
Post your comments here:
Quick links
Quantitative Aptitude
Verbal (English)
Reasoning
Programming
Interview
Placement Papers