How to understand this code ↓↓↓ and these relationship operators ↓↓↓ ?? | Sololearn: Learn to code for FREE!
New course! Every coder should learn Generative AI!
Try a free lesson
+ 4

How to understand this code ↓↓↓ and these relationship operators ↓↓↓ ??

#include<stdio.h> #include<stdlib.h> int main(){ int x = 10, y = 20 , z = 5 , i ; i = x < y < z ; printf("%d\n ", i); // Output : 1 // i can't catch why 1 return 0; }

19th Feb 2022, 8:22 PM
Mik
Mik - avatar
8 Answers
+ 9
It is because of how you are chaining x < y < z together, which will non-intuitively result in true instead of false, due to how it is evaluated. If you break it up into smaller fragments you'll probably understand better. Process it from left to right (this is undefined depending on the compiler used). x < y results in true because x is less than y. However, when you now do the next comparison, you'll have; true < z Since true and z are of different types, boolean and int, the boolean is implicitly converted to an int resulting in; 1 < z This evaluates to true, so i is equal to the boolean true. Now during the fprint() i is output as an int so it is converted to the value of 1 and that is why 1 is what is output instead of 0.
19th Feb 2022, 8:36 PM
ChaoticDawg
ChaoticDawg - avatar
+ 4
Mik_RDC 1 < z will result in the bool value true, but since i is of type int this bool value is implicitly converted to the int value 1, so i is equal to 1 not true. Sorry, for the confusion.
19th Feb 2022, 9:28 PM
ChaoticDawg
ChaoticDawg - avatar
+ 3
ChaoticDawg i can catch now big thanks to your help
19th Feb 2022, 10:26 PM
Mik
Mik - avatar
+ 3
Kyrill I was think that befor : 10 < 20 = 1 and 20 < 5 = 0 1 and 0 = 1&&0 or 1*0 = 0
21st Feb 2022, 4:09 AM
Mik
Mik - avatar
+ 2
BeCause 10 < 20 = 1 and 20 < 5 = 0 1 and 0 = 1&&0 or 1*0 = 0
19th Feb 2022, 8:31 PM
Mik
Mik - avatar
+ 2
ChaoticDawg big thanks but when it take 1 < z it became a bool vs a int that can't work or how . if you put it or assign it into a variable this variable must be of wich type int or other
19th Feb 2022, 9:23 PM
Mik
Mik - avatar
+ 2
There are no booleans in C. Just 1 and 0. so : int x = 10, y =20, z = 5, i; i = x < y < z; 1) x < y ( 10 < 20 ) // it's 1 (true) 2) 1 < z ( 1 < 5 ) // it's again 1 (true) 3) i = 1 // and the next step we print this result
20th Feb 2022, 11:19 PM
Pavel 10 🇷🇺
Pavel 10 🇷🇺 - avatar
+ 1
So: < returns a true/false value. True is considered 1 and false is considered 0 (in binary). If you 'deconstruct' it, it'll look like this: x < y < z -> 10 < 20 < 5 -> 10 < 20 = (true)1 -> 1 < 5 = (true)1 Basically, we're going left-to-right. 10 is less than 20, so we get true, or 1. True (or 1) is less than 5, so we get true again (or 1). This is simply odd handling of C. It converts the bool to an int because the variable is a type of 'int'. Try this in Python, Lua, JS or any language that is more high-level (and has dynamic types) and you will get 'true' rather than '1'. Therefore, our output shall be 1, or true.
21st Feb 2022, 2:20 AM
Kyrill
Kyrill - avatar