if (a&3 == 2)
`==' has higher precedence than `&'. Thus it is evaluated as:
if (a & (3==2)
which is the same as:
if (a&0)
Furthermore, is the same as:
if (0) => Therefore, the if condition is always `false'.
Hint: use brackets if you are not sure about associativity!