2.5. Arithmetic
Figure
2.6 summarizes the C++ arithmetic operators. The asterisk (*) indicates
multiplication and the percent sign
(%) is the modulus operator that will be
discussed shortly. The arithmetic operators in Fig. 2.6 are all binary operators
Fig. 2.6. Arithmetic operators.
| C++ operation |
C++ arithmetic operator |
Algebraic expression |
C++ expression |
| Addition |
+ |
f +
7 |
f + 7 |
| Subtraction |
– |
p –
c |
p – c |
| Multiplication |
* |
bm
or b · m |
b * m |
| Division |
/ |
x /
y or or x ÷ y |
x / y |
| Modulus |
% |
r mod
s |
r %
s |
Integer division (i.e., where both the numerator and the denominator
are integers) yields an integer quotient; for example, the expression 7 /
4 evaluates to 1 and the expression 17 / 5 evaluates to
3. Note that any fractional part in
integer division is discarded (i.e., truncated)—no rounding occurs.
C++ provides the modulus
operator, %, that yields the
remainder after integer division. The modulus operator can be used only with
integer operands. The expression x % y yields the remainder after
x is divided by y. Thus, 7 % 4 yields 3 and
17 % 5 yields 2. In later
chapters, we discuss many interesting applications of the modulus operator, such
as determining whether one number is a multiple of another (a special case of
this is determining whether a number is odd or even).
Common Programming Error 2.3
|
Attempting to use the modulus operator
(%) with noninteger operands is a compilation
error. |
Parentheses for Grouping
Subexpressions
Parentheses are used in C++
expressions in the same manner as in algebraic expressions. For example, to
multiply a times the quantity b + c we
write a * ( b + c ).
Rules of Operator Precedence
C++ applies the operators in
arithmetic expressions in a precise sequence determined by the following rules of operator precedence, which are generally the same as those followed in
algebra:
-
Operators in expressions contained within pairs
of parentheses are evaluated first. Parentheses are said to be at the "highest
level of precedence." In cases of nested,
or embedded, parentheses, such as
the operators in the innermost pair
of parentheses are applied first. [Note: As in algebra, it is acceptable to place unnecessary
parentheses in an expression to make the expression clearer. These are called
redundant parentheses.]
-
Multiplication, division and
modulus operations are applied next. If an expression contains several
multiplication, division and modulus operations, operators are applied from left
to right. Multiplication, division and modulus are said to be on the same level
of precedence.
-
Addition and subtraction operations
are applied last. If an expression contains several addition and subtraction
operations, operators are applied from left to right. Addition and subtraction
also have the same level of precedence.
The set of rules of operator precedence
defines the order in which C++ applies operators. When we say that certain
operators are applied from left to right, we are referring to the associativity of the
operators. For example, in the expression
the addition operators (+)
associate from left to right, so a + b is calculated first, then
c is added to that sum to determine the value of
the whole expression. We'll see that some operators associate from right to
left. Figure 2.7 summarizes these rules of operator precedence. This table
will be expanded as additional C++ operators are introduced. A complete
precedence chart is included in Appendix
A.
Fig. 2.7. Precedence of arithmetic
operators.
| Operator(s) |
Operation(s) |
Order of evaluation (precedence) |
| ( ) |
Parentheses |
Evaluated first. If the parentheses are nested, the
expression in the innermost pair is evaluated first. If there are several pairs
of parentheses "on the same level" (i.e., not nested), they are evaluated left
to right. |
* /
% |
Multiplication, Division,
Modulus |
Evaluated second. If there are
several, they are evaluated left to right. |
+ - |
Addition Subtraction |
Evaluated last. If there are
several, they are evaluated left to right. |
Good Programming Practice 2.5
|
Using
redundant parentheses in complex arithmetic expressions can make the expressions
clearer. |