Mikroelektronika MIKROE-738 Datenbogen

Seite von 682
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 first 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 first 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 final 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!