Bitwise '&' operator

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
}

5 - 101
4 - 100
5&4 - 100

It is true.


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

Because 0b100 & 0b101 equals 0b100 and the latter does not equal 0.


0b101 & 0b100 = 0b100

or

5&4 = 4

and 4 is non-zero and prints Yes