+ 7

Can anyone explain what is this ?

Please tell about how the operators work. Cout<< ( ( 1 > 2 ) ? 3 : 4 ) ; ans: 4 int i=0 ; Cout <<( i=0 ? 1 : 2 ? 3 : 4 ) ; ans:3

20th Oct 2019, 1:34 PM
Kashyap Kumar
Kashyap Kumar - avatar
10 Answers
+ 12
The ternary operator works like a shorthand of `if` statement <expression> ? <true-block> : <false-block> Equal to: if(<expression>) <true-block> else <false-block> ● Now for first case: ((1 > 2) ? 3 : 4) • 1 is less than 2, so expression `1 > 2` is evaluated as false. ((false) ? 3 : 4) • 4 is returned here, because expression evaluates to false. ● For the second case: int i = 0; - Remember in C/C++ any non zero integral value is considered true. (i = 0 ? 1 : 2 ? 3 : 4) • Here zero is assigned to variable <i> then <i> is evaluated, which yields false because <i> is zero. ((false ? 1 : 2) ? 3 : 4) • `(false ? 1 : 2)` returns 2. Again non zero value is considered true, and zero is false. ((2) ? 3 : 4) • Since 2 is considered true (as it is non zero), here ternary operator returns 3. Hth, cmiiw
20th Oct 2019, 1:57 PM
Ipang
+ 7
You're very welcome buddy 👍
20th Oct 2019, 2:12 PM
Ipang
+ 4
Thanks Ipang , your answer is like a tutorial,it cleared all my doubts.
20th Oct 2019, 2:06 PM
Kashyap Kumar
Kashyap Kumar - avatar
+ 3
Ipang 😵
3rd Apr 2020, 6:45 AM
Kevin ★
+ 2
Ipang I have a doubt. This thread is making me think too much: https://www.sololearn.com/Discuss/2221739/?ref=app In the example: ( i = 0 ? 1 : 2 ? 3 :4) Have assignment operator higher precedence than ( ? : ternary )? Shouldn't it be ( i = (0?1:(2?3:4)))? I am confused. [Edit] Solved
2nd Apr 2020, 7:45 PM
Kevin ★
+ 2
Kevin Star In general assignment operation precedence (priority) is low, because the RHS operand needs to be fully evaluated before the result can be assigned to the LHS operand. But in the case of ternary operation `i = 0 ? 1 : 2 ? 3 : 4`, the assignment for variable <i> is evaluated first, because it is needed to proceed with decision making. When an assignment operation be used as a condition (as boolean state), it is generally considered a truthy statement. However, use of parentheses may or may not alter the final evaluation result of the entire expression (the nested ternary operation). I still find myself puzzled at times when faced with single or nested ternary operation. Check this snippet and see how it can be quite tricky. #include <stdio.h> int main() { int i = 0; printf("1. %d\n", (i = 0 ? 1 : 2) ? 3 : 4); printf("2. %d\n", (i = 1 ? 1 : 2) ? 3 : 4); printf("3. %d\n", (i = 0 ? 1 : 2 ? 3 : 4)); printf("4. %d\n", (i = 1 ? 1 : 2 ? 3 : 4)); return 0; } (Edited)
3rd Apr 2020, 2:24 AM
Ipang
+ 2
Ipang cool examples. In my first answer I said that assignment is evaluated first but then I ran this. https://code.sololearn.com/cVpHwJqf0f59/?ref=app And now this: https://code.sololearn.com/cA9i6w2dShPJ/?ref=app
3rd Apr 2020, 2:49 AM
Kevin ★
+ 1
Kevin Star That's exactly what I mean by tricky 🤔 Still parentheses position plays a role I guess ...
3rd Apr 2020, 2:58 AM
Ipang
+ 1
Kevin Star Though I'm not sure, *maybe* this types of problem works differently among languages. I recall there was this question about nested ternary in PHP, where I learned that PHP requires nested ternary to be written with parentheses. PHP refuse to proceed when given nested ternary without parentheses (forgot the warning message). https://www.sololearn.com/Discuss/2219956/?ref=app
3rd Apr 2020, 6:06 AM
Ipang
+ 1
Kevin Star 😁 you tell me about it 😆
3rd Apr 2020, 7:06 AM
Ipang