ISBN 0-321-49362-1
Chapter 7
Expressions andAssignmentStatements
Corrected and improved by Assoc. Prof. Zeki Bayram, EMU, NorthCyprus. Original Copyright © 2007 Addison-Wesley. All rights reserved.
1-2
Chapter 7 Topics
Introduction
Arithmetic Expressions
Overloaded Operators
Type Conversions
Relational and Boolean Expressions
Short-Circuit Evaluation
Assignment Statements
Mixed-Mode Assignment
Corrected and improved by Assoc. Prof. Zeki Bayram, EMU, NorthCyprus. Original Copyright © 2007 Addison-Wesley. All rights reserved.
1-3
Introduction
Expressions are the fundamental means ofspecifying computations in a programminglanguage
To understand expression evaluation, needto be familiar with the orders of operatorand operand evaluation
Essence of imperative languages isdominant role of assignment statements
Corrected and improved by Assoc. Prof. Zeki Bayram, EMU, NorthCyprus. Original Copyright © 2007 Addison-Wesley. All rights reserved.
1-4
Arithmetic Expressions
Arithmetic evaluation was one of themotivations for the development of the firstprogramming languages
Arithmetic expressions consist ofoperators, operands, parentheses, andfunction calls
Corrected and improved by Assoc. Prof. Zeki Bayram, EMU, NorthCyprus. Original Copyright © 2007 Addison-Wesley. All rights reserved.
1-5
Arithmetic Expressions: Design Issues
Operator precedence rules?
Operator associativity rules?
Order of operand evaluation?
Operand evaluation side effects?
Operator overloading?
Type mixing in expressions?
Corrected and improved by Assoc. Prof. Zeki Bayram, EMU, NorthCyprus. Original Copyright © 2007 Addison-Wesley. All rights reserved.
1-6
Arithmetic Expressions: Operators
A unary operator has one operand
A binary operator has two operands
A ternary operator has three operands
Corrected and improved by Assoc. Prof. Zeki Bayram, EMU, NorthCyprus. Original Copyright © 2007 Addison-Wesley. All rights reserved.
1-7
Arithmetic Expressions: OperatorPrecedence Rules
The operator precedence rules forexpression evaluation define the order inwhich operators in an expression that aredıfferent from one another are evaluated
Typical precedence levels
 parentheses
 unary operators
 ** (power operator)
 *, /
 +, -
Corrected and improved by Assoc. Prof. Zeki Bayram, EMU, NorthCyprus. Original Copyright © 2007 Addison-Wesley. All rights reserved.
1-8
Arithmetic Expressions: OperatorAssociativity Rule
The operator associativity rules for expressionevaluation define the order in which adjacentidentical  operators are evaluated
Typical associativity rules
Left to right, except **, which is right to left
Sometimes unary operators associate right to left
APL is different; all operators have equalprecedence and all operators associate right to left
Precedence and associativity rules can be overridenwith parentheses
Corrected and improved by Assoc. Prof. Zeki Bayram, EMU, NorthCyprus. Original Copyright © 2007 Addison-Wesley. All rights reserved.
1-9
Arithmetic Expressions: ConditionalExpressions
C-based languages (e.g., C, C++)
An example:
average = (count == 0)? 0 : sum / count
Evaluates as if written like
if (count == 0)
      average = 0
else
      average = sum /count
Corrected and improved by Assoc. Prof. Zeki Bayram, EMU, NorthCyprus. Original Copyright © 2007 Addison-Wesley. All rights reserved.
1-10
Arithmetic Expressions: Potentials forSide Effects
Functional side effects: when a function changes atwo-way parameter or a non-local variable
Problem with functional side effects:
When a function referenced in an expression altersanother operand of the expression; e.g., for a parameterchange:
         a = 10;
 /* assume that fun changes its parameter */
b = a + fun(a);
 
Corrected and improved by Assoc. Prof. Zeki Bayram, EMU, NorthCyprus. Original Copyright © 2007 Addison-Wesley. All rights reserved.
1-11
Overloaded Operators
Use of an operator for more than onepurpose is called operator overloading
Some are common (e.g., + for int andfloat)
C++, Ada, Fortran 95, and C# allow user-defined overloaded operators
Potential problems:
Readability may suffer. Same operator, differentfunctionality.
Corrected and improved by Assoc. Prof. Zeki Bayram, EMU, NorthCyprus. Original Copyright © 2007 Addison-Wesley. All rights reserved.
1-12
Type Conversions
narrowing conversion is one that convertsan object to a type that cannot include allof the values of the original type e.g.,float to int
widening conversion is one in which anobject is converted to a type that caninclude at least approximations to all of thevalues of the original typee.g., int to float
Corrected and improved by Assoc. Prof. Zeki Bayram, EMU, NorthCyprus. Original Copyright © 2007 Addison-Wesley. All rights reserved.
1-13
Type Conversions: Mixed Mode
mixed-mode expression is one that hasoperands of different types
coercion is an implicit type conversion
Disadvantage of coercions:
They decrease in the type error detection ability of thecompiler
In most languages, all numeric types are coercedin expressions, using widening conversions
In Ada, there are virtually no coercions inexpressions
Corrected and improved by Assoc. Prof. Zeki Bayram, EMU, NorthCyprus. Original Copyright © 2007 Addison-Wesley. All rights reserved.
1-14
Explicit Type Conversions
Done by the user explicitly
Called casting in C-based languages
Examples
C: (int)angle
Ada: Float (Sum)
Corrected and improved by Assoc. Prof. Zeki Bayram, EMU, NorthCyprus. Original Copyright © 2007 Addison-Wesley. All rights reserved.
1-15
Type Conversions: Errors in Expressions
Causes
Inherent limitations of arithmetice.g., division by zero
Limitations of computer arithmetice.g. overflow
Corrected and improved by Assoc. Prof. Zeki Bayram, EMU, NorthCyprus. Original Copyright © 2007 Addison-Wesley. All rights reserved.
1-16
Relational and Boolean Expressions
<, >, >=, <=,
!=, ==, .NE., <>
Corrected and improved by Assoc. Prof. Zeki Bayram, EMU, NorthCyprus. Original Copyright © 2007 Addison-Wesley. All rights reserved.
1-17
Relational and Boolean Expressions
Boolean Expressions
Operands are Boolean and the result is Boolean
Example operators
FORTRAN 90C        Ada
and         &&   and
or          ||   or
not          !   not
                 xor
Corrected and improved by Assoc. Prof. Zeki Bayram, EMU, NorthCyprus. Original Copyright © 2007 Addison-Wesley. All rights reserved.
1-18
Relational and Boolean Expressions: NoBoolean Type in C
C  uses int type with 0 for false andnonzero for true
One odd characteristic of C’s expressions:a < b < c  is a legal expression, but theresult is not what you might expect:
Left operator is evaluated, producing 0 or 1
The evaluation result is then compared with thethird operand (i.e., c)
Corrected and improved by Assoc. Prof. Zeki Bayram, EMU, NorthCyprus. Original Copyright © 2007 Addison-Wesley. All rights reserved.
1-19
Short Circuit Evaluation
An expression in which the result isdetermined without evaluating all of theoperands and/or operators
Example: (13*a) * (b/13–1)
If a is zero, there is no need to evaluate (b/13-1)
Corrected and improved by Assoc. Prof. Zeki Bayram, EMU, NorthCyprus. Original Copyright © 2007 Addison-Wesley. All rights reserved.
1-20
Short Circuit Evaluation (continued)
C, C++, and Java: use short-circuit evaluation forthe usual Boolean operators (&& and ||), but alsoprovide bitwise Boolean operators that are notshort circuit (& and |)
Short-circuit evaluation exposes the potentialproblem of side effects in expressionse.g. (a > b) || (b++ / 3)
Corrected and improved by Assoc. Prof. Zeki Bayram, EMU, NorthCyprus. Original Copyright © 2007 Addison-Wesley. All rights reserved.
1-21
Assignment Statements
The general syntax
<target_var> <assign_operator> <expression>
The assignment operator
=   FORTRAN, BASIC, the C-based languages
:=  ALGOL, Pascal, Ada
Corrected and improved by Assoc. Prof. Zeki Bayram, EMU, NorthCyprus. Original Copyright © 2007 Addison-Wesley. All rights reserved.
1-22
Assignment Statements: ConditionalTargets
Conditional targets (Perl)($flag ? $total : $subtotal) = 0
Which is equivalent to
if ($flag){
$total = 0
} else {
$subtotal = 0
}
Corrected and improved by Assoc. Prof. Zeki Bayram, EMU, NorthCyprus. Original Copyright © 2007 Addison-Wesley. All rights reserved.
1-23
Assignment Statements: CompoundOperators
a = a + b
is written as
a += b
Corrected and improved by Assoc. Prof. Zeki Bayram, EMU, NorthCyprus. Original Copyright © 2007 Addison-Wesley. All rights reserved.
1-24
Assignment Statements: UnaryAssignment Operators
Combine increment and decrementoperations with assignment
Examples
sum = ++count (pre-increment)
sum = count++ (post-increment)
count++
-count++ (count incremented then negated)
Corrected and improved by Assoc. Prof. Zeki Bayram, EMU, NorthCyprus. Original Copyright © 2007 Addison-Wesley. All rights reserved.
1-25
Assignment as an Expression
In C, C++, and Java, the assignmentstatement produces a result and can beused as operands
An example:
 while ((ch = getchar())!= EOF){}
ch = getchar() is carried out; the result(assigned to ch) is used as a conditionalvalue for the while statement
Corrected and improved by Assoc. Prof. Zeki Bayram, EMU, NorthCyprus. Original Copyright © 2007 Addison-Wesley. All rights reserved.
1-26
List Assignments
Perl and Ruby support list assignments
   e.g.,
      ($first, $second, $third) = (20, 30, 40);
Corrected and improved by Assoc. Prof. Zeki Bayram, EMU, NorthCyprus. Original Copyright © 2007 Addison-Wesley. All rights reserved.
1-27
Mixed-Mode Assignment
Example
int a, b;
float c;
c = a / b;
In Fortran, C, and C++, any numeric typevalue can be assigned to any numerictype variable
In Java, only widening assignmentcoercions are done
In Ada, there is no assignment coercion
Corrected and improved by Assoc. Prof. Zeki Bayram, EMU, NorthCyprus. Original Copyright © 2007 Addison-Wesley. All rights reserved.
1-28
Summary
Expressions
Operator precedence and associativity
Operator overloading
Mixed-type expressions
Various forms of assignment