The &&
operator uses lazy evaluation. If either side of the &&
operator is false
, then the whole expression is false
.
C checks the truth value of the left hand side of the operator, which in your case is 0
. Since 0
is false in c, then the right hand side expression of the operation, (a = b = 777)
, is never evaluated.
The second case is similar, except that ||
returns true
if the left hand side expression returns true
. Also remember that in c, anything that is not 0
is considered true
.
Hope this helps.