if(1 == 2 || 4){cout<<"True";}else{cout<<"False";}
This is how I read the above. If 1 is equal to 2 or 4, then print true. Otherwise, print false. When this is executed though... true is printed. Obviously I'm misunderstanding something here. 1 is not equal to 2 or 4. Wouldn't that make it false?
Best Answer
Yeah, I've made the same mistake.
Read the sentence again:
If 1 is equal to 2 or 4, then print true.
The "2" and "4" both refer to the "If 1 is equal to [...]." That means, the sentence is just an abbreviation of
If 1 is equal to 2 or 1 is equal to 4, then print true.
This leads us to the if
-clause
if (1 == 2 || 1 == 4)
instead.
1 == 2 || 4
is true because (1 == 2) == false
ORed with 4 == true
, yields true (false OR true = true).
This is how I read the above. If 1 is equal to 2 or 4, then print true. Otherwise, print false. When this is executed though... true is printed. Obviously I'm misunderstanding something here. 1 is not equal to 2 or 4. Wouldn't that make it false?
No, 1 is equal to 2 or 4. 4
is true (because it's not zero). So anything "or 4" is also true. Therefore "1 is equal to 2 or 4" is true.
In this your phrase
If 1 is equal to 2 or 4, then print true
you need to add a pair of words that to get a correct equivalent C++ phrase
If 1 is equal to 2 or is equal to 4, then print true
Thus it will look the following way
if ( 1 == 2 or 1 == 4 ){cout << "True";}else{cout<<"False";}
As for the original condition
1 == 2 || 4
then the compiler consideres it the following way (due to the priorities of the operators):
( 1 == 2 ) || 4
According to the C++ Stanbdard
The operators == and != both yield true or false, i.e., a result oftype bool.
So as 1 == 2 is equal to false
then you get
false || 4
where 4 as it is not equal to 0 is converted to boolean true
and as result the entire condition evaluates to true
It's evaluating to true because if you check for the boolean value of just an integer (like you're doing with the number 4), it will evaluate to true. Like the people said above, you have to split it up.
This not how if statements work in C++. If you want to know if something is equal to one thing or another thing then it is
if (this == this_thing || this == another_thing)
What you have
if(1 == 2 || 4)
Gets evaluated to
if ((1 == 2) || 4)if (false || true)if (true)
So the if statement will always be true.