User manual
244
mikoC PRO for dsPIC
MikroElektronika
Logical Operators
Operands of logical operations are considered true or false, that is non-zero or zero. Logical operators always return 1
or 0. Operands in a logical expression must be of scalar type.
Logical operators && and || associate from left to right. Logical negation operator ! associates from right to left.
Logical Operators Overview
|| 0 x
0 0 1
x 1 1
Operator Operation Precedence
&& logical AND 5
|| logical OR 4
! logical negation 14
&& 0 x
0 0 0
x 0 1
Logical Operations
! 0 x
1 0
Precedence of logical, relational, and arithmetic operators was designated in such a way to allow complex expressions
without parentheses to have an expected meaning:
c >= ‘0’ && c <= ‘9’; /* reads as: (c >= ‘0’) && (c <= ‘9’) */
a + 1 == b || ! f(x); /* reads as: ((a + 1) == b) || (! (f(x))) */
Logical AND && returns 1 only if both expressions evaluate to be nonzero, otherwise returns 0. If the rst expression
evaluates to false, the second expression will not be evaluated. For example:
a > b && c < d; /* reads as (a > b) && (c < d) */
/* if (a > b) is false (0), (c < d) will not be evaluated */
Logical OR || returns 1 if either of expression evaluates to be nonzero, otherwise returns 0. If the rst expression
evaluates to true, the second expression is not evaluated. For example:
a && b || c && d; /* reads as: (a && b) || (c && d) */
/* if (a && b) is true (1), (c && d) will not be evaluated */
Logical Expressions and Side Effects
General rule regarding complex logical expressions is that the evaluation of consecutive logical operands stops at the
very moment the nal result is known. For example, if we have an expression a && b && c where a is false (0), then
operands b and c will not be evaluated. This is very important if b and c are expressions, as their possible side effects
will not take place!