User manual

Table Of Contents
242
mikoC PRO for PIC32
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!