With x & 5
you are making a bitwise and operation (it is not a logical and). Since:
4 = 0b0100 AND
5 = 0b0101 =
---------------
4 = 0b0100 != 0
the result of the condition is true
. That 4 is less or equal of 5 (4 <= 5
) is again true
.
But you are not testing the same condition, you are only comparing two operations that both return true
. It is only by chance that both return true.
Don’t worry: this is a mistake that many people that just started programming make. Please check out the differences between bitwise operations and logical connectives.