Previous: Function Call, Up: Expressions [Contents][Index]
When you enter an expression that contains more than one operator, then
it may not be clear which operation should be performed first. For
example, in the expression 6 + 3 * 4
one might choose to perform
the addition first and the multiplication later, yielding (6 + 3) *
4 = 9 * 4 = 36
, or one might choose to perform the multiplication
first and the addition later, yielding 6 + (3 * 4) = 6 + 12 = 18
.
To take care of situations like this, the operators are assigned an
order of precedence: an indication of which operator goes first
in any situation.
The following list shows groups containing operators of equal precedence, with the groups listed in order of decreasing precedence:
.
()
^
*
/
%
mod
smod
#
+
-
<
>
ge
le
gt
lt
eq
ne
and
or
xor
&
|
andif
orif
For example, multiplication (*
) has a higher precedence than
addition (+
), so in our example 6 + 3 * 4
, multiplication
goes first and addition second. You can make the addition go first
after all by making the order explicit using grouping with parentheses
(which has the highest precedence): (6 + 3) * 4
yields 36
.
All operators except power-taking (^
) have left
associativity: if they are combined with operators of equal precedence,
then the operations are evaluated from left to right. For example, in
3 * 4 / 5
, the multiplication and the division have the same
order of precedence and are both left associative, so the leftmost
operation, in this case the multiplication, goes first, yielding
2
(remember that the example involves integers only). With
enforced precedence for the division, through 3 * (4 / 5)
, we get
0
.
The operators with the greatest precedence are grouping with
parentheses, and selecting a member from a list or structure (.
).
Unary minus refers to a minus sign applied to a single argument,
and it has high precedence. For example, - 3 + 4
yields
1
, and not -7
. However, the precedence of power-taking is
higher than that of unary minus, so -3^2
is equal to -9
.
Power-taking has right associativity, so 3 ^ 4 ^ 2
is
interpreted as 3 ^ (4 ^ 2) = 3 ^ 16
.
Using parentheses, one can explicitly indicate any desired precedence.
Previous: Function Call, Up: Expressions [Contents][Index]