The && operator shall yield 1 if both of its operands compare unequal to 0; otherwise, it yields 0. The result has type int.
Unlike the bitwise binary & operator, the && operator guarantees left-to-right evaluation; there is a sequence point after the evaluation of the first operand. If the first operand compares equal to 0, the second operand is not evaluated.
The latter operand should not be evaluated if the former is the expression of 0.
According to the C99 standard (6.5.13):
The latter operand should not be evaluated if the former is the expression of 0.