Understanding C++ Arithmetic Operators: Precedence, Associativity, and Evaluation
This chapter explores the fundamentals of C++ binary arithmetic operators, including addition, subtraction, multiplication, division, and modulus. Learn about operator precedence and associativity, as well as shortcut arithmetic operators. We cover how mixed expressions evaluate with different data types and the role of implicit and explicit casting. The chapter also delves into using modulus to perform basic checks, illustrating through examples, while explaining how associativity and precedence affect the evaluation order. Gain a clear understanding of these essential C++ concepts.
Understanding C++ Arithmetic Operators: Precedence, Associativity, and Evaluation
E N D
Presentation Transcript
Object-Oriented Programming Using C++Third Edition Chapter 2 Evaluating C++ Expressions
Objectives • Use C++ binary arithmetic operators • Learn about the precedence and associativity of arithmetic operations • Examine shortcut arithmetic operators • Use other unary operators • Evaluate Boolean expressions • Perform operations on struct fields Object-Oriented Programming Using C++, Third Edition
Using C++ Binary Arithmetic Operators • Five simple arithmetic operators: • the addition operator (+) • the subtraction operator (–) • the multiplication operator (*) • the division operator (/) • the modulus operator (%) Note that they are all binary operators Object-Oriented Programming Using C++, Third Edition
Using C++ Binary Arithmetic Operators (continued) Object-Oriented Programming Using C++, Third Edition
Using C++ Binary Arithmetic Operators (continued) • Addition, subtraction, multiplication, division, or modulus of any two integers results in an integer • For example, 7 / 3 evaluates to 3 • Mixed expression: operands have different data types • For example, 3.2 * 2 • Unifying type: • Data type of the value that occupies more memory • All types in the expression are temporarily converted to a unifying type Object-Oriented Programming Using C++, Third Edition
Using C++ Binary Arithmetic Operators (continued) • The order of precedence of unifying types from highest to lowest • long double • double • float • unsigned long • long • unsigned int • int • short • char Object-Oriented Programming Using C++, Third Edition
Explicit cast Object-Oriented Programming Using C++, Third Edition
Using C++ Binary Arithmetic Operators (continued) • Cast: transform a value to another data type • Implicit cast: automatic cast, or transformation, that occurs when you assign a value of one type to a type with higher precedence • int answer = 2.0 * 7 • Explicit cast: deliberate cast • intResult = static_cast<int>(doubleVariable); • intResult = (int)doubleVariable; • static_cast<int>('A') // is 65 Preferred method in C++ Object-Oriented Programming Using C++, Third Edition
Using Modulus • Modulus (%) gives the remainder of integer division • 7 % 3 results in 1 • -10 % 8 produces -2 • -10 % -8 produces -2 • Can be used only with integers • Can be used to extract digits from numbers • 6,543 % 10 is 3 • 6,789 % 10 is 9 Object-Oriented Programming Using C++, Third Edition
Using Modulus (continued) • Check digit: digit added to a number that validates the authenticity of the number • A simple algorithm: • Assume an account number named acctNum is 123454 • Remove the last digit • Perform modulus on the new number with an arbitrary value, say 7 (remainder = shortAcctNum % 7) • Compare the last digit of the original account number (lastDigit = acctNum % 10) with the remainder from the check digit calculation Object-Oriented Programming Using C++, Third Edition
Precedence and Associativity of Arithmetic Operators • Multiplication, division, and modulus are said to have higher arithmetic precedence–that is, they are performed first in an arithmetic statement with multiple operations • Associativity: rule that dictates the order in which an operator works with its operands • In C++, most operators have left-to-right associativity Object-Oriented Programming Using C++, Third Edition
Precedence and Associativity of Arithmetic Operators (continued) • When C++ evaluates a mixed arithmetic expression, the following steps occur: • The leftmost operation with the highest precedence is evaluated • If operands are the same type, the result is the same data type • If the operands are different types, C++ performs an implicit cast and the result is the same type as the one that occupies more memory • Each subsequent *, /, or % operation is evaluated in the same manner from left to right Object-Oriented Programming Using C++, Third Edition
Precedence and Associativity of Arithmetic Operators (continued) • Steps (continued): • The leftmost operation with the lower precedence (+ and –) is evaluated • If operands are the same type, the result is the same type • If operands are different types, C++ performs an implicit cast and the result is the same type as the one that occupies more memory • Each subsequent + or – operation is evaluated in the same manner from left to right • Use parentheses to override precedence rules Object-Oriented Programming Using C++, Third Edition
Precedence and Associativity of Arithmetic Operators (continued) Object-Oriented Programming Using C++, Third Edition
Shortcut Arithmetic Operators • Two categories of shortcut arithmetic operators are: • Compound assignment operators • Increment and decrement operators Object-Oriented Programming Using C++, Third Edition
Compound Assignment Operators • Add and assign operator (+=) • Subtract and assign operator (– =) • Multiply and assign operator (*=) • Divide and assign operator (/=) • Modulus and assign operator (%=) Object-Oriented Programming Using C++, Third Edition
Increment and Decrement Operators • Prefix increment operator ++count • Postfix increment operator count++ • Prefix decrement operator --count • Postfix decrement operator count-- Object-Oriented Programming Using C++, Third Edition
Using Shortcut Arithmetic Operators Object-Oriented Programming Using C++, Third Edition
Other Unary Operators • Positive value operator +5 • Negative value operator -8 • Address operator (&) &x Object-Oriented Programming Using C++, Third Edition
Other Unary Operators Hexadecimal number Object-Oriented Programming Using C++, Third Edition
Evaluating Boolean Expressions • Relational operators: evaluate the relationship between operands • Used to evaluate Boolean expressions • Boolean expression: interpreted as true or false Object-Oriented Programming Using C++, Third Edition
Evaluating Boolean Expressions (continued) • The unary operator ! is the not operator: reverses the true/false value of an expression • cout<<(9>2); displays a 1 • cout<<!(9>2); displays a 0 • !0 is 1 • !1 is 0 • !5 is 0 • !-5 is 0 • Don’t confuse = with == Object-Oriented Programming Using C++, Third Edition
Performing Operations on struct Fields Object-Oriented Programming Using C++, Third Edition
Performing Operations on struct Fields (continued) Object-Oriented Programming Using C++, Third Edition
You Do It: Using Arithmetic Operators int a,b,c; double x,y,z; a = 13; b = 4; x = 3.3; y = 15.78; c = a + b; cout<<“a + b is ”<<c<<endl; z = x + y; cout <<“x + y is ”<<z<<endl; c = a / b; cout<<“a / b is ”<<c<<endl; c = a % b; cout<<“a% b is “<<c<<endl; Object-Oriented Programming Using C++, Third Edition
You Do It: Using Arithmetic Operators (continued) Object-Oriented Programming Using C++, Third Edition
Using Prefix and Postfix Increment and Decrement Operators a = 2; c = ++a; cout<<“a is ”<<a<<“ and c is ”<<c<<endl; a = 2; c = a++; cout<<“a is ”<<a<<“ and c is ”<<c<<endl; Object-Oriented Programming Using C++, Third Edition
Using Prefix and Postfix Increment and Decrement Operators (continued) Object-Oriented Programming Using C++, Third Edition
Using Operators with struct Fields cout<<“Please enter a student's credit hours ”; cin>>oneSophomore.creditHours; cout<<“Please enter the student's grade point average ”; cin>>oneSophomore.gradePointAverage; cout<<“The number of credit hours is ” << oneSophomore.creditHours<<endl; cout<<“The grade point average is ”<< oneSophomore.gradePointAverage<<endl; hoursRemaining = HOURS_REQUIRED_TO_GRADUATE oneSophomore.creditHours; cout<<“This student needs ”<<hoursRemaining<< “ more credit hours to graduate”<<endl; Object-Oriented Programming Using C++, Third Edition
Using Operators with struct Fields (continued) Object-Oriented Programming Using C++, Third Edition
Summary • There are five simple binary arithmetic operators: addition (+), subtraction (–), multiplication (*), division (/), and modulus (%) • When you mix data types in a binary arithmetic expression, the result is always the same type as the type that takes the most memory to store • Several shortcut operators for arithmetic exist, such as +=, prefix ++, and postfix ++ Object-Oriented Programming Using C++, Third Edition
Summary (continued) • Boolean expression evaluates as true or false • In C++, the value 0 is always interpreted as false; all other values are interpreted as true • Fields contained within structures are used in arithmetic and Boolean expressions in the same manner as are primitive variables Object-Oriented Programming Using C++, Third Edition