Much like with the = and == operators, it can be very easy to make the mistake of swapping one of the logical operators for its bitwise counterpart (& and &&, for example). If you are lucky, logical operators and bitwise operators might sometimes work the same, but they are not the same. They can sometimes yield completely different results.
- & is the bitwise AND operator
- 0b1010 & 0b1101 > 0b1000
- && is the logical AND operator
- 0b1010 && 0b1101 > 0b0001 (TRUE)
- <Non-Zero Value> && <Non-Zero Value> > 1 (TRUE)
Be careful not to confuse & and &&. They are not interchangeable!
For example, if we perform a bitwise and "&" between the nibble 0b1010 and 0b1101, we get a result of 0b1000. Then, if we perform a logical and "&&" between the same two nibbles, we get a different result (TRUE) which is usually represented by a value of 1 (or 0b0001 in binary).
Now, note that in this situation, both results would evaluate to a non-zero value, so if used in a conditional expression, they would both be interpreted as TRUE. If however, you were interested in the numeric result of a bitwise AND operation, the result of using "&&" would be completely wrong.
Example 1 – Using A Bitwise AND Operator
In Example 1, we use a bitwise AND which results in a zero value, so the text does not print:
0b1010 AND 0b0101 > 0b0000
This is a common bug for beginners (and sometimes experts). The evaluation of the expression has a completely different result from the desired logical AND.
Example 2 – Using A Logical AND Operator
In Example 2, we use a logical AND, which results in a non-zero value, so the text does print:
0b1010 AND 0b0101 > 0b0001 (TRUE)
Remember: with a logical AND, if both operands are non-zero, then the result is non-zero or TRUE (usually a value of 1).