SlideShare a Scribd company logo
1
Expressions, Evaluation and Assignments
• Arithmetic expressions
• Overloaded operators
• Type conversions
• Relational and Boolean expressions
• Short-circuit evaluation
• Assignment statements
• Mixed-mode assignment statements
• Sebesta Chapter 7
2
Expressions
• Expressions are fundamental means of specifying
computations in programming languages
• Understanding how expressions are evaluated requires
knowing the order in which operator and operand are
evaluated
• Essence of imperative languages is the dominant role of
assignment statements, including expressions
3
Arithmetic Expressions
• Evaluation of numeric expressions
– Motivation for the development of PLs
• Remember trajectory tables?
• Arithmetic expressions consist of
– Operators
– Operands
– Parentheses/delimiters
– Function calls
4
Design Issues for Arithmetic Expressions
1. What are the operator precedence rules?
2. What are the operator associativity rules?
3. What is the order of operand evaluation?
4. Are there restrictions on operand evaluation side
effects?
5. Is user-defined operator overloading supported?
6. What mode mixing in expressions is allowed?
5
Arity of Arithmetic Expressions
• Arity
– Number of operands/arguments of a function
• A unary operator has one operand
• A binary operator has two operands
– Most common operators
• A ternary operator has three operands
• Some languages support N-ary operators
– In Lisp, a benefit of prefix representation
(* pi r r) vs. pi*r*r or pi*r^2
6
Operator Precedence Rules
• Precedence define the order in which adjacent operators
are evaluated
– Adjacent - separated by at most one operand
• Different PLs have different precedence levels
• Typical precedence levels – highest to lowest
1. Parentheses
2. Unary operators
3.** (exponentiation, if the language supports it)
4.*, /, % (modulo)
5.+, -
7
Operator Associativity Rules
• Define the order in which adjacent operators with the
same precedence level are evaluated
• Typical associativity rules
– Left to right, except ** which is right to left
– Unary operators may associate right to left (e.g., FORTRAN)
• APL is different
– All operators have equal precedence and
– All operators associate right to left!
• Parentheses override precedence and associativity rule
8
Expression Evaluation Process
• Order of evaluation is crucial
1. Variables
– fetch value from memory
1. Constants
– either implicit in instruction
– or fetch from memory
1. Parenthesized expressions
– evaluate all operands and operators first
1. Function references
– the most interesting
9
Functions/Procedures
Result/
Return value
Input/Output Side Effects
Function/Procedure
Arguments/
Parameters
• Parameters – pass by value (in) or by reference (in/out)
• Return value
• Input/Output
• Side Effects
10
Side Effects
• Side effect
– a function or procedure changes a two-way
parameter or a non-local variable
• A major problem with side effects:
– When a function referenced in an expression alters another
operand of the expression; e.g., for a parameter change:
a = 10;
b = a + fun(&a); /*Assume fun changes its parameter*/
• Results of the expression depend on the order of
evaluation of statements!!
– why is this bad?
11
Solution 1: Prohibit Side Effects!
1. Language definition prohibits side effects
– No two-way parameters
– No non-local references
• Advantage
– It works!
– E.g. functional languages
• Disadvantages:
– Need flexibility of two-way parameters and non-local variables
• What about C? What about Java?
– Copying of parameters to avoid side effects
12
Solution 2: Fix Evaluation Order
2. Operand evaluation order is fixed in language definition
• Advantage
– We always know how expression will be evaluated
• Disadvantage
– This limits some compiler optimizations
13
Conditional Expressions
• Ternary operator <cond> ? <expr1> : <expr2>
– Same as if (<cond> ) <expr1> else <expr2>
– C, C++, and Java <condition> average
(count == 0) ? 0 : sum / count
– Lisp:
(if <test> <do-if-true> <do-ifnot>)
• Short-circuit evaluation means
1. Evaluate test first and then
2. Evaluate only the branch taken
• e.g. avoid division by zero above
14
Overloading Operators
• Operator overloading
– use of an operator for more than one purpose
• Some are common (e.g., + for int and float)
• Some are potential trouble
• e.g., * in C and C++, / for int and float in Java
– Loss of compiler error detection
• Missing operand should be a detectable error
– Some loss of readability
– Can be avoided by introduction of new symbols
e.g., Pascal’s div
15
User-defined Overloaded Operators
• C++ and Ada allow user-defined overloaded operators
• Problems
– Users can define nonsense operations
– Readability may suffer, even when the operators make sense
16
Type Conversions
• Narrowing conversion
– converts to a “smaller” type (type has fewer values)
• e.g., float to int
• 3.99 to 4
• Widening conversion
– converts to a type that includes all values of the
original type
– or at least an approximation of each
• e.g., int to float
• 4 to 4.0f
17
Type Conversions
• Mixed-mode expression
– Operands of different types
• Coercion
– An implicit type conversion
• Disadvantage
– Decreases the type error detection ability of the compiler
• In most languages, widening conversions of numeric
types in expressions can be coerced
• In Ada, there are virtually no coercions in expressions
18
Explicit Type Conversions
• In C, C++, Ada, Java called casts
• E.g., Ada:
FLOAT (INDEX) --INDEX is INTEGER type
– converts to floating point
• E.g., Java:
float speed = 45.5;
(int) speed; /* =45; cuts off fractional part*/
19
Errors in Expressions
1. Inherent properties of mathematical functions
– e.g. division by zero, infinity
1. Approximate representations
– Fractions (e.g. 2/3, 0.1) and irrational numbers like π and e
– Approximate huge integers with floating point
1. Limitations of computer arithmetic
– e.g. overflow, underflow
• If ignored by the run-time system (may even be
undetectable) can lead to
crashes, erroneous output, unpredictable behavior
• Less of a problem in some languages!
– E.g. exact fractions and huge integers in Lisp prevent errors of
type 2 & 3
20
Relational Operators, Boolean Expressions
• Boolean data type
– 2 values
• True
• False
• Boolean expression
– Has relational operators and operands of various types
– Evaluates to a Boolean value
– Operator symbols vary among languages
• e.g.not equal
– !=
– /=
– .NE.
– <>
– #
21
Boolean Expressions
• Operands are Boolean
• Result is Boolean
Boolean operator comparison
F77 FORTRAN 90 C Ada Lisp
.AND. and && and and
.OR. or || or or
.NOT. not ! not
xor
not
xor
22
Odd Boolean Expressions in C
• C (until very recently) had no Boolean type
– used int 0 for false, and 1 or nonzero for true
• One odd characteristic of C’s expressions:
x < y < z
– Is a legal expression, but
– the result is not what you might expect! - I.e.(x<y)&(y<z)
– What does it do?
• Hint: C is left associative, what is z compared to?
23
Operators Precedence
• Precedence of Ada operators:
**, abs, not
*, /, mod, rem
[unary] -, +
[binary] +, -, &
[relative] in, not in
and, or, xor, then, or, else
• C, C++, and Java have
– over 40 operators, and
– at least 15 different levels of precedence
24
Short Circuit Evaluation
• Suppose Java did not use short-circuit evaluation
• Problem
– table look-up
for (i = 1; i < a.length) && (a [i] != x); i++) {}
• Problem: reading from a file until eof
• Short-circuit evaluation has the problem of side effects
e.g. (a > b) || (b++ / 3) vs. a > b) || (++b / 3)
25
Short Circuit Evaluation in PLs
• C, C++, Java
– Provide short-circuit Boolean operators && and||
– As well as operators that are not short circuit: & and|
– why both?
• Ada
– More operators, programmer can specify either
– Not short circuit using and, or
– Short-circuit using and then, or else
• FORTRAN 77
– short circuit, any side-affected variables must be set to
undefined
26
Assignment Statements
• Assignment operator syntax
– = FORTRAN, BASIC, PL/I, C, C++, Java
– := ALGOLs, Pascal, Ada
– setf/setq in Lisp
• Very bad if assignment = overloaded as relational =
– e.g. in PL/I: A = B = C;
• Note difference from C’s
– ==
– A common C error using = when it should be ==
27
Complex Assignment Statements
• Multiple targets (PL/I)
A, B = 10
• Compound assignment operators in C, C++, Java
sum += next;
• Conditional targets in C, C++, Java
(first == true) ? total : subtotal = 0
• Unary assignment operators in C, C++, Java
a++;
• C, C++, and Java treat = as an arithmetic binary
operator
a = b * (c = d * 2 + 1) + 1
28
Assignment Statement as an Expression
• In C, C++, Java
– Assignment statements produce results
– So, they can be used as operands in expressions
while ((ch = getchar()) != EOF){…}
• Disadvantages
– Another kind of expression side effect
– Readability
29
Mixed-Mode Assignment
• FORTRAN, C, C++
– any numeric value can be assigned to any numeric variable
– conversion is automatic
• Pascal
– integers can be assigned to reals, but
– reals cannot be assigned to integers
• must specify truncate or round
• Java
– only widening assignment coercions are done
• Ada
– no assignment coercion
• Lecture-specific question:
– Advantages/disadvantages of these approaches?

More Related Content

PPTX
Loop(for, while, do while) condition Presentation
PPTX
Loops in c language
PPTX
Typedef
PPTX
Decision making in JAVA
PPTX
Exception Handling in object oriented programming using C++
PPT
Abstract class in java
PPTX
Control structures in java
PPT
Branching in C
Loop(for, while, do while) condition Presentation
Loops in c language
Typedef
Decision making in JAVA
Exception Handling in object oriented programming using C++
Abstract class in java
Control structures in java
Branching in C

What's hot (20)

PPTX
Method overloading
PPTX
Java 8 Lambda and Streams
PPT
Final keyword in java
PPTX
The Loops
PPTX
WHAT IS ABSTRACTION IN JAVA
PDF
Java Thread Synchronization
PPTX
Operators in java
PDF
SPL 9 | Scope of Variables in C
PPTX
C++ decision making
PDF
Java 8 Stream API. A different way to process collections.
PPT
Memory allocation in c
PPTX
PDF
StringTokenizer in java
PPTX
3.looping(iteration statements)
PPTX
Interfaces in java
PPTX
The string class
PPTX
Lecture 14 run time environment
PPTX
Control Statements in Java
PDF
Automata theory
Method overloading
Java 8 Lambda and Streams
Final keyword in java
The Loops
WHAT IS ABSTRACTION IN JAVA
Java Thread Synchronization
Operators in java
SPL 9 | Scope of Variables in C
C++ decision making
Java 8 Stream API. A different way to process collections.
Memory allocation in c
StringTokenizer in java
3.looping(iteration statements)
Interfaces in java
The string class
Lecture 14 run time environment
Control Statements in Java
Automata theory
Ad

Viewers also liked (16)

PDF
Selección de libros para promover la lectura
PPTX
Palmcoien classification
PPTX
Mind the mind by Chaitanya Charan Das
PPTX
Evaluación desempeño docente 2017 30022017 cgie
PPTX
Design Process of Agriculture Ontologies
PDF
Turnitin student mar60
PPTX
C++ Tutorial
PDF
Lecture 3 Conditionals, expressions and Variables
PPTX
Lecture 10 semantic analysis 01
PPTX
Data Types, Variables, and Operators
PPSX
Type conversion
PPTX
Intermediate code generation1
PDF
[Webinar] New from Google: Algorithm changes & social media analytics
PDF
Que es soft layer / IBM
PDF
Examen muestra 2
Selección de libros para promover la lectura
Palmcoien classification
Mind the mind by Chaitanya Charan Das
Evaluación desempeño docente 2017 30022017 cgie
Design Process of Agriculture Ontologies
Turnitin student mar60
C++ Tutorial
Lecture 3 Conditionals, expressions and Variables
Lecture 10 semantic analysis 01
Data Types, Variables, and Operators
Type conversion
Intermediate code generation1
[Webinar] New from Google: Algorithm changes & social media analytics
Que es soft layer / IBM
Examen muestra 2
Ad

Similar to Expressions in c++ (20)

PPT
7 expressions and assignment statements
PDF
7 expressions and assignment statements
PPSX
Chapter 07
PDF
07 control+structures
PPTX
Chapter 3.pptx
PPTX
c programming2.pptx
PDF
Programming for Problem Solving
PPTX
principal of programming language unit 3 explanation
PPT
Operator & Expression in c++
PDF
02 - Data Types and Expressions using C.pdf
PPTX
Ch4 Expressions
PPTX
Lecture 02 Programming C for Beginners 001
PPTX
C programming slide c03
PDF
Mit6 087 iap10_lec02
PPT
Operation and expression in c++
PPT
chapter 5.ppt
PPT
PPTX
C basics
PPTX
C basics
PPT
6 operators-in-c
7 expressions and assignment statements
7 expressions and assignment statements
Chapter 07
07 control+structures
Chapter 3.pptx
c programming2.pptx
Programming for Problem Solving
principal of programming language unit 3 explanation
Operator & Expression in c++
02 - Data Types and Expressions using C.pdf
Ch4 Expressions
Lecture 02 Programming C for Beginners 001
C programming slide c03
Mit6 087 iap10_lec02
Operation and expression in c++
chapter 5.ppt
C basics
C basics
6 operators-in-c

Recently uploaded (20)

PPTX
human mycosis Human fungal infections are called human mycosis..pptx
PDF
2.FourierTransform-ShortQuestionswithAnswers.pdf
PDF
Microbial disease of the cardiovascular and lymphatic systems
PDF
O5-L3 Freight Transport Ops (International) V1.pdf
PDF
01-Introduction-to-Information-Management.pdf
PPTX
Final Presentation General Medicine 03-08-2024.pptx
PDF
ANTIBIOTICS.pptx.pdf………………… xxxxxxxxxxxxx
PDF
Abdominal Access Techniques with Prof. Dr. R K Mishra
PPTX
Renaissance Architecture: A Journey from Faith to Humanism
PDF
Black Hat USA 2025 - Micro ICS Summit - ICS/OT Threat Landscape
PPTX
PPT- ENG7_QUARTER1_LESSON1_WEEK1. IMAGERY -DESCRIPTIONS pptx.pptx
PDF
BÀI TẬP BỔ TRỢ 4 KỸ NĂNG TIẾNG ANH 9 GLOBAL SUCCESS - CẢ NĂM - BÁM SÁT FORM Đ...
PPTX
Cell Structure & Organelles in detailed.
PPTX
Pharmacology of Heart Failure /Pharmacotherapy of CHF
PPTX
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
PDF
TR - Agricultural Crops Production NC III.pdf
PPTX
Lesson notes of climatology university.
PDF
The Lost Whites of Pakistan by Jahanzaib Mughal.pdf
PPTX
BOWEL ELIMINATION FACTORS AFFECTING AND TYPES
PPTX
Institutional Correction lecture only . . .
human mycosis Human fungal infections are called human mycosis..pptx
2.FourierTransform-ShortQuestionswithAnswers.pdf
Microbial disease of the cardiovascular and lymphatic systems
O5-L3 Freight Transport Ops (International) V1.pdf
01-Introduction-to-Information-Management.pdf
Final Presentation General Medicine 03-08-2024.pptx
ANTIBIOTICS.pptx.pdf………………… xxxxxxxxxxxxx
Abdominal Access Techniques with Prof. Dr. R K Mishra
Renaissance Architecture: A Journey from Faith to Humanism
Black Hat USA 2025 - Micro ICS Summit - ICS/OT Threat Landscape
PPT- ENG7_QUARTER1_LESSON1_WEEK1. IMAGERY -DESCRIPTIONS pptx.pptx
BÀI TẬP BỔ TRỢ 4 KỸ NĂNG TIẾNG ANH 9 GLOBAL SUCCESS - CẢ NĂM - BÁM SÁT FORM Đ...
Cell Structure & Organelles in detailed.
Pharmacology of Heart Failure /Pharmacotherapy of CHF
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
TR - Agricultural Crops Production NC III.pdf
Lesson notes of climatology university.
The Lost Whites of Pakistan by Jahanzaib Mughal.pdf
BOWEL ELIMINATION FACTORS AFFECTING AND TYPES
Institutional Correction lecture only . . .

Expressions in c++

  • 1. 1 Expressions, Evaluation and Assignments • Arithmetic expressions • Overloaded operators • Type conversions • Relational and Boolean expressions • Short-circuit evaluation • Assignment statements • Mixed-mode assignment statements • Sebesta Chapter 7
  • 2. 2 Expressions • Expressions are fundamental means of specifying computations in programming languages • Understanding how expressions are evaluated requires knowing the order in which operator and operand are evaluated • Essence of imperative languages is the dominant role of assignment statements, including expressions
  • 3. 3 Arithmetic Expressions • Evaluation of numeric expressions – Motivation for the development of PLs • Remember trajectory tables? • Arithmetic expressions consist of – Operators – Operands – Parentheses/delimiters – Function calls
  • 4. 4 Design Issues for Arithmetic Expressions 1. What are the operator precedence rules? 2. What are the operator associativity rules? 3. What is the order of operand evaluation? 4. Are there restrictions on operand evaluation side effects? 5. Is user-defined operator overloading supported? 6. What mode mixing in expressions is allowed?
  • 5. 5 Arity of Arithmetic Expressions • Arity – Number of operands/arguments of a function • A unary operator has one operand • A binary operator has two operands – Most common operators • A ternary operator has three operands • Some languages support N-ary operators – In Lisp, a benefit of prefix representation (* pi r r) vs. pi*r*r or pi*r^2
  • 6. 6 Operator Precedence Rules • Precedence define the order in which adjacent operators are evaluated – Adjacent - separated by at most one operand • Different PLs have different precedence levels • Typical precedence levels – highest to lowest 1. Parentheses 2. Unary operators 3.** (exponentiation, if the language supports it) 4.*, /, % (modulo) 5.+, -
  • 7. 7 Operator Associativity Rules • Define the order in which adjacent operators with the same precedence level are evaluated • Typical associativity rules – Left to right, except ** which is right to left – Unary operators may associate right to left (e.g., FORTRAN) • APL is different – All operators have equal precedence and – All operators associate right to left! • Parentheses override precedence and associativity rule
  • 8. 8 Expression Evaluation Process • Order of evaluation is crucial 1. Variables – fetch value from memory 1. Constants – either implicit in instruction – or fetch from memory 1. Parenthesized expressions – evaluate all operands and operators first 1. Function references – the most interesting
  • 9. 9 Functions/Procedures Result/ Return value Input/Output Side Effects Function/Procedure Arguments/ Parameters • Parameters – pass by value (in) or by reference (in/out) • Return value • Input/Output • Side Effects
  • 10. 10 Side Effects • Side effect – a function or procedure changes a two-way parameter or a non-local variable • A major problem with side effects: – When a function referenced in an expression alters another operand of the expression; e.g., for a parameter change: a = 10; b = a + fun(&a); /*Assume fun changes its parameter*/ • Results of the expression depend on the order of evaluation of statements!! – why is this bad?
  • 11. 11 Solution 1: Prohibit Side Effects! 1. Language definition prohibits side effects – No two-way parameters – No non-local references • Advantage – It works! – E.g. functional languages • Disadvantages: – Need flexibility of two-way parameters and non-local variables • What about C? What about Java? – Copying of parameters to avoid side effects
  • 12. 12 Solution 2: Fix Evaluation Order 2. Operand evaluation order is fixed in language definition • Advantage – We always know how expression will be evaluated • Disadvantage – This limits some compiler optimizations
  • 13. 13 Conditional Expressions • Ternary operator <cond> ? <expr1> : <expr2> – Same as if (<cond> ) <expr1> else <expr2> – C, C++, and Java <condition> average (count == 0) ? 0 : sum / count – Lisp: (if <test> <do-if-true> <do-ifnot>) • Short-circuit evaluation means 1. Evaluate test first and then 2. Evaluate only the branch taken • e.g. avoid division by zero above
  • 14. 14 Overloading Operators • Operator overloading – use of an operator for more than one purpose • Some are common (e.g., + for int and float) • Some are potential trouble • e.g., * in C and C++, / for int and float in Java – Loss of compiler error detection • Missing operand should be a detectable error – Some loss of readability – Can be avoided by introduction of new symbols e.g., Pascal’s div
  • 15. 15 User-defined Overloaded Operators • C++ and Ada allow user-defined overloaded operators • Problems – Users can define nonsense operations – Readability may suffer, even when the operators make sense
  • 16. 16 Type Conversions • Narrowing conversion – converts to a “smaller” type (type has fewer values) • e.g., float to int • 3.99 to 4 • Widening conversion – converts to a type that includes all values of the original type – or at least an approximation of each • e.g., int to float • 4 to 4.0f
  • 17. 17 Type Conversions • Mixed-mode expression – Operands of different types • Coercion – An implicit type conversion • Disadvantage – Decreases the type error detection ability of the compiler • In most languages, widening conversions of numeric types in expressions can be coerced • In Ada, there are virtually no coercions in expressions
  • 18. 18 Explicit Type Conversions • In C, C++, Ada, Java called casts • E.g., Ada: FLOAT (INDEX) --INDEX is INTEGER type – converts to floating point • E.g., Java: float speed = 45.5; (int) speed; /* =45; cuts off fractional part*/
  • 19. 19 Errors in Expressions 1. Inherent properties of mathematical functions – e.g. division by zero, infinity 1. Approximate representations – Fractions (e.g. 2/3, 0.1) and irrational numbers like π and e – Approximate huge integers with floating point 1. Limitations of computer arithmetic – e.g. overflow, underflow • If ignored by the run-time system (may even be undetectable) can lead to crashes, erroneous output, unpredictable behavior • Less of a problem in some languages! – E.g. exact fractions and huge integers in Lisp prevent errors of type 2 & 3
  • 20. 20 Relational Operators, Boolean Expressions • Boolean data type – 2 values • True • False • Boolean expression – Has relational operators and operands of various types – Evaluates to a Boolean value – Operator symbols vary among languages • e.g.not equal – != – /= – .NE. – <> – #
  • 21. 21 Boolean Expressions • Operands are Boolean • Result is Boolean Boolean operator comparison F77 FORTRAN 90 C Ada Lisp .AND. and && and and .OR. or || or or .NOT. not ! not xor not xor
  • 22. 22 Odd Boolean Expressions in C • C (until very recently) had no Boolean type – used int 0 for false, and 1 or nonzero for true • One odd characteristic of C’s expressions: x < y < z – Is a legal expression, but – the result is not what you might expect! - I.e.(x<y)&(y<z) – What does it do? • Hint: C is left associative, what is z compared to?
  • 23. 23 Operators Precedence • Precedence of Ada operators: **, abs, not *, /, mod, rem [unary] -, + [binary] +, -, & [relative] in, not in and, or, xor, then, or, else • C, C++, and Java have – over 40 operators, and – at least 15 different levels of precedence
  • 24. 24 Short Circuit Evaluation • Suppose Java did not use short-circuit evaluation • Problem – table look-up for (i = 1; i < a.length) && (a [i] != x); i++) {} • Problem: reading from a file until eof • Short-circuit evaluation has the problem of side effects e.g. (a > b) || (b++ / 3) vs. a > b) || (++b / 3)
  • 25. 25 Short Circuit Evaluation in PLs • C, C++, Java – Provide short-circuit Boolean operators && and|| – As well as operators that are not short circuit: & and| – why both? • Ada – More operators, programmer can specify either – Not short circuit using and, or – Short-circuit using and then, or else • FORTRAN 77 – short circuit, any side-affected variables must be set to undefined
  • 26. 26 Assignment Statements • Assignment operator syntax – = FORTRAN, BASIC, PL/I, C, C++, Java – := ALGOLs, Pascal, Ada – setf/setq in Lisp • Very bad if assignment = overloaded as relational = – e.g. in PL/I: A = B = C; • Note difference from C’s – == – A common C error using = when it should be ==
  • 27. 27 Complex Assignment Statements • Multiple targets (PL/I) A, B = 10 • Compound assignment operators in C, C++, Java sum += next; • Conditional targets in C, C++, Java (first == true) ? total : subtotal = 0 • Unary assignment operators in C, C++, Java a++; • C, C++, and Java treat = as an arithmetic binary operator a = b * (c = d * 2 + 1) + 1
  • 28. 28 Assignment Statement as an Expression • In C, C++, Java – Assignment statements produce results – So, they can be used as operands in expressions while ((ch = getchar()) != EOF){…} • Disadvantages – Another kind of expression side effect – Readability
  • 29. 29 Mixed-Mode Assignment • FORTRAN, C, C++ – any numeric value can be assigned to any numeric variable – conversion is automatic • Pascal – integers can be assigned to reals, but – reals cannot be assigned to integers • must specify truncate or round • Java – only widening assignment coercions are done • Ada – no assignment coercion • Lecture-specific question: – Advantages/disadvantages of these approaches?