C++ Operators

An operator is a symbol that tells the compiler to perform specific mathematical or logical operations. C++ has rich built-in operators and provides the following types of operators:

  • Arithmetic Operators
  • Relational Operators
  • Logical Operators
  • Bitwise Operators
  • Assignment Operators
  • Miscellaneous Operators

This chapter will introduce arithmetic operators, relational operators, logical operators, bitwise operators, assignment operators, and other operators one by one.

Arithmetic Operators

The following table shows the arithmetic operators supported by C++.

Assume variable A has a value of 10 and variable B has a value of 20, then:

OperatorsDescriptionExample
+Add the two operands.A + B will give 30
-Subtracts the second operand from the first operand.A - B will give -10
*Multiply the two operands.A * B will give 200
/Divide the numerator by the denominator.B / A will give 2
%Modulus operator, the remainder after integer division.B % A will give 0
++Increment Operator, integer value increases by 1.A++ will give 11
--Decrement Operator, integer value decreases by 1.A-- will give 9

Example

See the following examples to understand the arithmetic operators available in C++.

Copy and paste the following C++ program into the test.cpp file, compile and run the program.

Example

#include <iostream> using namespace std; int main() { int a = 21; int b = 10; int c; c = a + b; cout << "Line 1 - value of c is" << c << endl ; c = a - b; cout << "Line 2 - value of c is" << c << endl ; c = a * b; cout << "Line 3 - value of c is" << c << endl ; c = a / b; cout << "Line 4 - value of c is" << c << endl ; c = a % b; cout << "Line 5 - value of c is" << c << endl ; int d = 10; // Test increment and decrement c = d++; cout << "Line 6 - value of c is" << c << endl ; d = 10; // Reassign c = d--; cout << "Line 7 - value of c is" << c << endl ; return 0; }

When the above code is compiled and executed, it produces the following results:

Line 1 - c 的值是 31
Line 2 - c 的值是 11
Line 3 - c 的值是 210
Line 4 - c 的值是 2
Line 5 - c 的值是 1
Line 6 - c 的值是 10
Line 7 - c 的值是 10

Relational Operators

The following table shows the relational operators supported by C++.

Assume variable A has a value of 10 and variable B has a value of 20, then:

OperatorsDescriptionExample
==Checks whether the values of two operands are equal; if equal, the condition is true.(A == B) is not true.
!=Checks whether the values of two operands are equal; if not equal, the condition is true.(A != B) is true.
>Checks whether the value of the left operand is greater than the value of the right operand; if so, the condition is true.(A > B) is not true.
<Checks whether the value of the left operand is less than the value of the right operand; if so, the condition is true.(A < B) is true.
>=Checks whether the value of the left operand is greater than or equal to the value of the right operand; if so, the condition is true.(A >= B) is not true.
<=Checks whether the value of the left operand is less than or equal to the value of the right operand; if so, the condition is true.(A <= B) is true.

Example

See the following examples to understand the relational operators available in C++.

Copy and paste the following C++ program into the test.cpp file, compile and run the program.

Example

#include <iostream> using namespace std; int main() { int a = 21; int b = 10; int c ; if( a == b ) { cout << "Line 1 - a equals b" << endl ; } else { cout << "Line 1 - a is not equal to b" << endl ; } if ( a < b ) { cout << "Line 2 - a is less than b" << endl ; } else { cout << "Line 2 - a is not less than b" << endl ; } if ( a > b ) { cout << "Line 3 - a is greater than b" << endl ; } else { cout << "Line 3 - a is not greater than b" << endl ; } /*Change the values of a and b*/ a = 5; b = 20; if ( a <= b ) { cout << "Line 4 - a is less than or equal to b" << endl ; } if ( b >= a ) { cout << "Line 5 - b is greater than or equal to a" << endl ; } return 0; }

When the above code is compiled and executed, it produces the following results:

Line 1 - a 不等于 b
Line 2 - a 不小于 b
Line 3 - a 大于 b
Line 4 - a 小于或等于 b
Line 5 - b 大于或等于 a

Logical Operators

The following table shows the logical operators supported by C++.

Assume variable A has a value of 1 and variable B has a value of 0, then:

OperatorsDescriptionExample
&&Called the logical AND operator. If both operands are true, then the condition is true.(A && B) is false.
||Called the logical OR operator. If either of the two operands is true, then the condition is true.(A || B) is true.
!Called the logical NOT operator. It is used to reverse the logical state of an operand. If the condition is true, the logical NOT operator will make it false.!(A && B) is true.

Example

See the following examples to understand the logical operators available in C++.

Copy and paste the following C++ program into the test.cpp file, compile and run the program.

Example

#include <iostream> using namespace std; int main() { int a = 5; int b = 20; int c ; if ( a && b ) { cout << "Line 1 - Condition is true"<< endl ; } if ( a || b ) { cout << "Line 2 - Condition is true"<< endl ; } /*Change the values of a and b*/ a = 0; b = 10; if ( a && b ) { cout << "Line 3 - Condition is true"<< endl ; } else { cout << "Line 4 - Condition is not true"<< endl ; } if ( !(a && b) ) { cout << "Line 5 - Condition is true"<< endl ; } return 0; }

When the above code is compiled and executed, it produces the following results:

Line 1 - 条件为真
Line 2 - 条件为真
Line 4 - 条件不为真
Line 5 - 条件为真

Bitwise Operators

Bitwise operators operate on bits and perform operations bit by bit. The truth tables of &, |, and ^ are as follows:

pqp & qp | qp ^ q
00000
01011
11110
10011

Suppose A = 60 and B = 13. Now expressed in binary format, they are as follows:

A = 0011 1100

B = 0000 1101

-----------------

A&B = 0000 1100

A|B = 0011 1101

A^B = 0011 0001

~A  = 1100 0011

The following table shows the bitwise operators supported by C++. Assume variable A has a value of 60 and variable B has a value of 13, then:

OperatorsDescriptionExample
&

Bitwise AND operation. Performs an "AND" operation on binary bits. Operation rules:

0&0=0;   
0&1=0;    
1&0=0;     
1&1=1;
(A & B) evaluates to 12, which is 0000 1100.
|

Bitwise OR operator. Performs an "OR" operation on binary bits. Operation rules:

0|0=0;   
0|1=1;   
1|0=1;    
1|1=1;
(A | B) evaluates to 61, which is 0011 1101.
^

XOR operator. Performs an "XOR" operation on binary bits. Operation rules:

0^0=0;   
0^1=1;   
1^0=1;  
1^1=0;
(A ^ B) evaluates to 49, which is 0011 0001.
~

Bitwise NOT operator. Performs an "inversion" operation on binary bits. Operation rules:

~1=-2;   
~0=-1;
(~A) will give -61, which is 1100 0011, the two's complement form of a signed binary number.
<<Binary left shift operator. Shifts all binary bits of an operand to the left by a certain number of positions (the leftmost binary bits are discarded, and 0s are filled in on the right).A << 2 evaluates to 240, which is 1111 0000.
>>Binary right shift operator. Shifts all binary bits of a number to the right by a certain number of positions. For positive numbers, 0s are filled on the left; for negative numbers, 1s are filled on the left; the bits on the right are discarded.A >> 2 evaluates to 15, which is 0000 1111.

Example

See the following examples to understand the bitwise operators available in C++.

Copy and paste the following C++ program into the test.cpp file, compile and run the program.

Example

#include <iostream> using namespace std; int main() { unsigned int a = 60; // 60 = 0011 1100 unsigned int b = 13; // 13 = 0000 1101 int c = 0; c = a & b; // 12 = 0000 1100 cout << "Line 1 - value of c is" << c << endl ; c = a | b; // 61 = 0011 1101 cout << "Line 2 - value of c is" << c << endl ; c = a ^ b; // 49 = 0011 0001 cout << "Line 3 - value of c is" << c << endl ; c = ~a; // -61 = 1100 0011 cout << "Line 4 - value of c is" << c << endl ; c = a << 2; // 240 = 1111 0000 cout << "Line 5 - value of c is" << c << endl ; c = a >> 2; // 15 = 0000 1111 cout << "Line 6 - value of c is" << c << endl ; return 0; }

When the above code is compiled and executed, it produces the following results:

Line 1 - c 的值是 12
Line 2 - c 的值是 61
Line 3 - c 的值是 49
Line 4 - c 的值是 -61
Line 5 - c 的值是 240
Line 6 - c 的值是 15

Assignment Operators

The following table lists the assignment operators supported by C++:

OperatorsDescriptionExample
=Simple assignment operator. Assigns the value of the right operand to the left operand.C = A + B will assign the value of A + B to C.
+=Addition assignment operator, adds the right operand to the left operand and assigns the result to the left operand.C += A is equivalent to C = C + A.
-=Subtraction assignment operator, subtracts the right operand from the left operand and assigns the result to the left operand.C -= A is equivalent to C = C - A.
*=Multiplication assignment operator, multiplies the right operand by the left operand and assigns the result to the left operand.C *= A is equivalent to C = C * A.
/=Division assignment operator, divides the left operand by the right operand and assigns the result to the left operand.C /= A is equivalent to C = C / A.
%=Modulo and assignment operator. Takes the modulus of two operands and assigns it to the left operand.C %= A is equivalent to C = C % A.
<<=Left shift and assignment operator.C <<= 2 is equivalent to C = C << 2.
>>=Right shift and assignment operator.C >>= 2 is equivalent to C = C >> 2.
&=Bitwise AND and assignment operator.C &= 2 is equivalent to C = C & 2.
^=Bitwise XOR and assignment operator.C ^= 2 is equivalent to C = C ^ 2
|=Bitwise OR and assignment operator.C |= 2 is equivalent to C = C | 2

Example

See the following examples to understand the assignment operators available in C++.

Copy and paste the following C++ program into the test.cpp file, compile and run the program.

Example

#include <iostream> using namespace std; int main() { int a = 21; int c ; c = a; cout << "Line 1 - = operator example, value of c = :" <<c<< endl ; c += a; cout << "Line 2 - += operator example, value of c = :" <<c<< endl ; c -= a; cout << "Line 3 - -= operator example, value of c = :" <<c<< endl ; c *= a; cout << "Line 4 - *= operator example, value of c = :" <<c<< endl ; c /= a; cout << "Line 5 - /= operator example, value of c = :" <<c<< endl ; c = 200; c %= a; cout << "Line 6 - %= operator example, value of c = :" <<c<< endl ; c <<= 2; cout << "Line 7 - <<= operator example, value of c = :" <<c<< endl ; c >>= 2; cout << "Line 8 - >>= operator example, value of c = :" <<c<< endl ; c &= 2; cout << "Line 9 - &= operator example, value of c = :" <<c<< endl ; c ^= 2; cout << "Line 10 - ^= operator example, value of c = :" <<c<< endl ; c |= 2; cout << "Line 11 - |= operator example, value of c = :" <<c<< endl ; return 0; }

When the above code is compiled and executed, it produces the following results:

Line 1 - =  运算符实例,c 的值 = 21
Line 2 - += 运算符实例,c 的值 = 42
Line 3 - -= 运算符实例,c 的值 = 21
Line 4 - *= 运算符实例,c 的值 = 441
Line 5 - /= 运算符实例,c 的值 = 21
Line 6 - %= 运算符实例,c 的值 = 11
Line 7 - <<= 运算符实例,c 的值 = 44
Line 8 - >>= 运算符实例,c 的值 = 11
Line 9 - &= 运算符实例,c 的值 = 2
Line 10 - ^= 运算符实例,c 的值 = 0
Line 11 - |= 运算符实例,c 的值 = 2

Miscellaneous Operators

The following table lists some other important operators supported by C++.

OperatorsDescription
sizeofsizeof operatorReturns the size of a variable. For example, sizeof(a) will return 4, where a is an integer.
Condition ? X : YConditional operatorIf Condition is true ? then the value is X : otherwise the value is Y.
,Comma OperatorIt executes a series of operations in sequence. The value of the entire comma expression is the value of the last expression in the comma-separated list.
. (dot) and -> (arrow)Member operatorUsed to reference members of classes, structures, and unions.
CastCast operatorConverts one data type to another data type. For example, int(2.2000) will return 2.
&Pointer operator &Returns the address of a variable. For example, &a; will give the actual address of the variable.
*Pointer operator *Points to a variable. For example, *var; will point to the variable var.

Operator precedence in C++

Operator precedence determines the grouping of terms in an expression. This affects how an expression is evaluated. Some operators have higher precedence than others; for example, multiplication and division operators have higher precedence than addition and subtraction operators.

For example, x = 7 + 3 * 2. Here, x is assigned 13, not 20, because the operator * has higher precedence than +, so the multiplication 3*2 is calculated first, and then 7 is added.

The following table lists the operators in order of precedence from high to low. Operators with higher precedence appear at the top of the table, and operators with lower precedence appear at the bottom. In an expression, operators with higher precedence are evaluated first.

Category OperatorsAssociativity
Postfix() [] -> . ++ - -   Left to right
Unary + - ! ~ ++ - - (type)* & sizeof  Right to left
Multiplicative * / % Left to right
Additive+ -  Left to right
Shift << >>  Left to right
Relationship< <= > >=  Left to right
Equality == !=  Left to right
Bitwise AND&  Left to right
Bitwise XOR ^  Left to right
Bitwise OR |  Left to right
Logical AND&&  Left to right
Logical OR ||  Left to right
Conditions?:  Right to left
Assignment = += -= *= /= %=>>= <<= &= ^= |= Right to left
comma ,  Left to right

Example

See the following examples to understand operator precedence in C++.

Copy and paste the following C++ program into the test.cpp file, compile and run the program.

Compare the difference between having parentheses and not having parentheses, which will produce different results. Because (), /, *, and + have different precedence levels, operators with higher precedence will be evaluated first.

Example

#include <iostream> using namespace std; int main() { int a = 20; int b = 10; int c = 15; int d = 5; int e; e = (a + b) * c / d; // ( 30 * 15 ) / 5 cout << "The value of (a + b) * c / d is" << e << endl ; e = ((a + b) * c) / d; // (30 * 15 ) / 5 cout << "The value of ((a + b) * c) / d is" << e << endl ; e = (a + b) * (c / d); // (30) * (15/5) cout << "The value of (a + b) * (c / d) is" << e << endl ; e = a + (b * c) / d; // 20 + (150/5) cout << "The value of a + (b * c) / d is" << e << endl ; return 0; }

When the above code is compiled and executed, it produces the following results:

(a + b) * c / d 的值是 90
((a + b) * c) / d 的值是 90
(a + b) * (c / d) 的值是 90
a + (b * c) / d 的值是 50
other extensions