If an expression involving the Boolean & operator is evaluated, both operands
are evaluated. Then the & operator is applied to the operand. When an expression
involving the && operator is evaluated, the first operand is evaluated.
If the first operand returns a value of true then the second operand is evaluated.
The && operator is then applied to the first and second operands. If the
first operand evaluates to false, the evaluation of the second operand is skipped.
Operator & has no chance to skip both sides evaluation and && operator
does. If asked why, give details as above.