I'm studying C from A Book on C by Kelley-Pohl, and there's this exercise that I don't understand:
int a = 0, b = 0, x;
x = 0 && (a = b = 777);
printf("%d %d %d\n", a, b, x);
x = 777 || (a = ++b);
printf("%d %d %d\n", a, b, x);
They just say to imagine the output and compare it to the real one. I thought the output would have been
777 777 0
778 778 1
but it is
0 0 0
0 0 1
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With