I am lacking some basic understanding in bitwise \'&\' operator.
5 = 101
4 = 100
So why the output of the below if
conditi
5 is 101.
4 is 100.
5 & 4
is not 0:
101
100 &
↓↓↓
100
Problem solved ✓
Clarification:
In C, every non-zero value satisfies the if
condition. Meaning, if you write:
if (-5) {
if (100) {
// reachable code
}
}
Whereas:
if (0) {
destroyTheWorld(); // we are safe
}
It enters the if condition. Because after the &
operation it returns non-zero value. In C, for all non-zero value it's like returning true.
Because 0b100 & 0b101
equals 0b100
and the latter does not equal 0
.
Understanding bitwise operator truth tables is crucial. Consider the following, where A
and B
are inputs and Y
is the output.
& (Bitwise And) When inputs A and B are true, output is true; otherwise output is false
A B Y
---------
0 | 0 | 0
0 | 1 | 0
1 | 0 | 0
1 | 1 | 1
| (Bitwise Or) When A or B or both inputs are true output is true; otherwise output is false
A B Y
---------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 1
^ (Bitwise X-Or) When A and B are opposite states, output is true; otherwise output is false
A B Y
---------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
! (Bitwise Not) Output is the opposite state of the input
A Y
-----
0 | 1
1 | 0
Your Equation (5 & 4) == (0101 & 0100) == 0100 == 4 == true
0101
& 0100
------
0100
0b101 & 0b100 = 0b100
or
5&4 = 4
and 4 is non-zero and prints Yes
5 - 101
4 - 100
5&4 - 100
It is true.