C language Operators and expressions
The main thing what microcontrollers does is operates with data. There are four main operations that microcontrollers does: adds, abstracts, multiplies and divides (+,-,*,/). division can be split in division “/” and modulus operation “%”. For instance i1/i2 is integer division.
Other part of operators is Relation operators. They are used for boolean conditions and expressions. Expressions with these operators return true or false values. Zero is taken as false and non zero value as true. Operators may be as follows: <, <=, > >=, ==, !=.
The priority of the first four operators is higher than that of the later two operators. These operators are used in relational expressions such as:
7 > 12 // false
20.1 < 20.2 // true
'b' < 'c' // true
"abb" < "abc" // true
Note that the equality operator is == and not =. ‘=’ is an assignment operator.
If you want to compare a and b for equality then you should write a == b, not a = b because a = b means you are assigning the value of b to a, as shown in.
Next part of operators are logical operators. With logical operators results may be combined to get some logical results. Logical operators may be: negation “!”, logical AND “&&” and logical OR “||”.
-
R1
R2
R1 && R2
R1 || R2
! R1
T
T
T
T
F
T
F
F
T
F
F
T
F
T
T
F
F
F
F
T
Next would be ternary operators return values based on the outcomes of relational expressions. For example, if you want to return the value of 1 if the expression is true and 2 if it is false, you can use the ternary operator.
Example
If you want to assign the maximum values of i and j to k then you can write the statement
k = ( i>j ) ? i : j;
If i > j then k will get the value equal to i, otherwise it will get the value equal to j.
The general form of the ternary operator is:
(expr 1) ? expr2 : expr3
If expr1 returns true then the value of expr2 is returned as a result; otherwise the value of expr3 is returned.
Incremental operators are used to increment or decrement value of variable. Incremental operators can be applied only to variables as prefix or postfix:
i = 3;
-
i gets the value 3.
-
j is decremented to 3.
-
k gets the value 3 + 3.
-
i is incremented
j =4;
k = i++ + -j;
you will get the value of k as 6, i as 4 and j as 3. The order of evaluation is as follows:
Another important operator when programming microcontrollers is bitwise operators. Bitwise operators interprets operands as strings of bits. Bitwise operators are six: bitwise AND(&), bitwise OR(|), bitwise XOR(^), bitwise complement(~), left shift(<<), and right shift(>>). For instance:
x >> 3 causes the variable x to be shifted to the right by three bits prior to its use.
r = r | 0x0c; The hexadecimal number 0x0c is a turned on and all other bits turned off.
Operator precedence rules
|
Operators |
Order of evaluation |
Remarks |
|---|---|---|
|
[] ( ) -> |
Left to right |
Array subscript, function call |
|
− + sizeof( ) ! ++ −− |
|
|
|
& * ~ (cast) |
Right to left |
Unary |
|
* / % |
Left to right |
Binary Multiplicative |
|
+ - |
Left to right |
Binary Additive |
|
>> << |
Left to right |
Shift operators |
|
< <= > >= |
Left to right |
Relational operators |
|
== != |
Left to right |
Equality operators |
|
& |
Left to right |
Bitwise AND operator |
|
^ |
Left to right |
Bitwise XOR operator |
|
| |
Left to right |
Bitwise OR operator |
|
&& |
Left to right |
Logical And operator |
|
|| |
Left to right |
Logical Or operator |
|
?: |
Left to right |
Conditional operator |
|
= += -= *= /= %= |
|
|
|
&= -= |= <<= >>= |
Right to left |
Assignment |
|
, |
Right to left |
Comma |
Add new comment