The purpose of comma operator is to string together several expressions. The value of a comma-separated list of expressions is the value of the right-most expression. Essentially, the comma’s effect is to cause a sequence of operations to be performed.
How Comma Operator Works?
The values of the other expressions will be discarded. This means that the expression on the right side will become the value of the entire comma-separated expression. For example −
var =(count =19, incr =10, count+1);
Here first assigns count the value 19, assigns incr the value 10, then adds 1 to count, and finally, assigns var the value of the rightmost expression, count+1, which is 20. The parentheses are necessary because the comma operator has a lower precedence than the assignment operator.
Example of Comma Operator
To see the effects of the comma operator, try running the following program −
#include <iostream>usingnamespace std;intmain(){int i, j;
j =10;
i =(j++, j+100,999+j);
cout << i;return0;}
When the above code is compiled and executed, it produces the following result −
1010
Here is the procedure how the value of i gets calculated: j starts with the value 10. j is then incremented to 11. Next, j is added to 100. Finally, j (still containing 11) is added to 999, which yields the result 1010.
Use Cases of Comma Operator
1. Using Comma Operator in Variable Initialization
In the following example, we use the comma operator to initialize multiple variables in a single statement.
#include <iostream>usingnamespace std;intmain(){int a, b, c;// Using comma operator for initialization
a =(b =10, c =20);
cout <<"Value of a: "<< a << endl;
cout <<"Value of b: "<< b << endl;
cout <<"Value of c: "<< c << endl;return0;}
When executed, this program outputs:
Value of a: 20
Value of b: 10
Value of c: 20
2. Using Comma Operator in Loops
The comma operator can be used in loops to update multiple variables.
#include <iostream>usingnamespace std;intmain(){// Using comma operator in a for loopfor(int i =0, j =5; i <5; i++, j--){
cout <<"i: "<< i <<", j: "<< j << endl;}return0;}
The comma operator can be used in function calls where multiple expressions are evaluated, but only the last value is passed as an argument.
#include <iostream>usingnamespace std;// Function that takes an integer parametervoiddisplay(int x){
cout <<"Received value: "<< x << endl;}intmain(){int a =5, b =10;// Using comma operator in function argumentsdisplay((a +=5, b +=20));return0;}
When executed, this program outputs:
Received value: 30
4. Using Comma Operator in if Statements
The comma operator can be useful in conditional statements when multiple expressions need to be checked.
#include <iostream>usingnamespace std;intmain(){int x =10, y =20;// Using comma operator in if conditionif(x +=5, y -=10, x > y){
cout <<"x is greater than y"<< endl;}else{
cout <<"y is greater than or equal to x"<< endl;}return0;}
where Exp1, Exp2, and Exp3 are expressions. Notice the use and placement of the colon. The value of a ? expression is determined like this: Exp1 is evaluated. If it is true, then Exp2 is evaluated and becomes the value of the entire ? expression. If Exp1 is false, then Exp3 is evaluated and its value becomes the value of the expression.
The ? is called a ternary operator because it requires three operands and can be used to replace if-else statements, which have the following form −
if(condition){
var = X;}else{
var = Y;}
For example, consider the following code −
if(y <10){
var =30;}else{
var =40;}
Above code can be rewritten like this −
var =(y <10)?30:40;
Here, x is assigned the value of 30 if y is less than 10 and 40 if it is not. You can the try following example −
#include <iostream>usingnamespace std;intmain(){// Local variable declaration:int x, y =10;
x =(y <10)?30:40;
cout <<"value of x: "<< x << endl;return0;}
When the above code is compiled and executed, it produces the following result −
The sizeof is a keyword, but it is a compile-time operator that determines the size, in bytes, of a variable or data type.
The sizeof operator can be used to get the size of classes, structures, unions and any other user defined data type.
Syntax of sizeof Operator
The syntax of using sizeof is as follows −
sizeof(data type)
Where data type is the desired data type including classes, structures, unions and any other user defined data type.
Example of sizeof Operator
Try the following example to understand all the sizeof operator available in C++. Copy and paste following C++ program in test.cpp file and compile and run this program.
#include <iostream>usingnamespace std;intmain(){
cout <<"Size of char : "<<sizeof(char)<< endl;
cout <<"Size of int : "<<sizeof(int)<< endl;
cout <<"Size of short int : "<<sizeof(shortint)<< endl;
cout <<"Size of long int : "<<sizeof(longint)<< endl;
cout <<"Size of float : "<<sizeof(float)<< endl;
cout <<"Size of double : "<<sizeof(double)<< endl;
cout <<"Size of wchar_t : "<<sizeof(wchar_t)<< endl;return0;}
When the above code is compiled and executed, it produces the following result, which can vary from machine to machine −
Size of char : 1
Size of int : 4
Size of short int : 2
Size of long int : 4
Size of float : 4
Size of double : 8
Size of wchar_t : 4
More Examples of sizeof in C++
The following examples demonstrate the common usage of the sizeof operator in C++:
Find the Size of Different Variables
In the following example, we are finding the memory size occupied by different variables.
#include <iostream>usingnamespace std;intmain(){int age =25;float price =99.99;char grade ='A';// Printing size of variables
cout <<"Size of age (int): "<<sizeof(age)<<" bytes"<< endl;
cout <<"Size of price (float): "<<sizeof(price)<<" bytes"<< endl;
cout <<"Size of grade (char): "<<sizeof(grade)<<" bytes"<< endl;return0;}
When executed, this program outputs:
Size of age (int): 4 bytes
Size of price (float): 4 bytes
Size of grade (char): 1 bytes
Find the Size of an Array Using sizeof
In the following example, we are finding the total size of an integer array and the number of elements it contains.
#include <iostream>usingnamespace std;intmain(){int scores[]={85,90,78,92,88};// Finding the number of elements in the arrayint totalSize =sizeof(scores);int elementSize =sizeof(scores[0]);int length = totalSize / elementSize;
cout <<"Total size of array: "<< totalSize <<" bytes"<< endl;
cout <<"Size of one element: "<< elementSize <<" bytes"<< endl;
cout <<"Number of elements: "<< length << endl;return0;}
When executed, this program outputs:
Total size of array: 20 bytes
Size of one element: 4 bytes
Number of elements: 5
Find the Size of a Class
In the following example, we are finding the memory size occupied by an object of a class.
#include <iostream>usingnamespace std;classStudent{int rollNumber;double marks;public:Student(int r =1,double m =95.5):rollNumber(r),marks(m){}};intmain(){// Finding size of class Student
cout <<"Size of Student class: "<<sizeof(Student)<<" bytes"<< endl;return0;}
C++ assignment operators are used to assign values to variables. These operators allow you to set or update the value stored in a variable.
List of C++ Assignment Operators
There are following assignment operators supported by C++ language
Operator
Description
Example
=
Simple assignment operator, Assigns values from right side operands to left side operand.
C = A + B will assign value of A + B into C
+=
Add AND assignment operator, It adds right operand to the left operand and assign the result to left operand.
C += A is equivalent to C = C + A
-=
Subtract AND assignment operator, It subtracts right operand from the left operand and assign the result to left operand.
C -= A is equivalent to C = C – A
*=
Multiply AND assignment operator, It multiplies right operand with the left operand and assign the result to left operand.
C *= A is equivalent to C = C * A
/=
Divide AND assignment operator, It divides left operand with the right operand and assign the result to left operand.
C /= A is equivalent to C = C / A
%=
Modulus AND assignment operator, It takes modulus using two operands and assign the result to left operand.
C %= A is equivalent to C = C % A
<<=
Left shift AND assignment operator.
C <<= 2 is same as C = C << 2
>>=
Right shift AND assignment operator.
C >>= 2 is same as C = C >> 2
&=
Bitwise AND assignment operator.
C &= 2 is same as C = C & 2
^=
Bitwise exclusive OR and assignment operator.
C ^= 2 is same as C = C ^ 2
|=
Bitwise inclusive OR and assignment operator.
C |= 2 is same as C = C | 2
Example of Assignment Operators
Try the following example to understand all the assignment operators available in C++.
Copy and paste the following C++ program in test.cpp file and compile and run this program.
#include <iostream>usingnamespace std;main(){int a =21;int c ;
c = a;
cout <<"Line 1 - = Operator, Value of c = : "<<c<< endl ;
c += a;
cout <<"Line 2 - += Operator, Value of c = : "<<c<< endl ;
c -= a;
cout <<"Line 3 - -= Operator, Value of c = : "<<c<< endl ;
c *= a;
cout <<"Line 4 - *= Operator, Value of c = : "<<c<< endl ;
c /= a;
cout <<"Line 5 - /= Operator, Value of c = : "<<c<< endl ;
c =200;
c %= a;
cout <<"Line 6 - %= Operator, Value of c = : "<<c<< endl ;
c <<=2;
cout <<"Line 7 - <<= Operator, Value of c = : "<<c<< endl ;
c >>=2;
cout <<"Line 8 - >>= Operator, Value of c = : "<<c<< endl ;
c &=2;
cout <<"Line 9 - &= Operator, Value of c = : "<<c<< endl ;
c ^=2;
cout <<"Line 10 - ^= Operator, Value of c = : "<<c<< endl ;
c |=2;
cout <<"Line 11 - |= Operator, Value of c = : "<<c<< endl ;return0;}
When the above code is compiled and executed, it produces the following result −
Line 1 - = Operator, Value of c = : 21
Line 2 - += Operator, Value of c = : 42
Line 3 - -= Operator, Value of c = : 21
Line 4 - *= Operator, Value of c = : 441
Line 5 - /= Operator, Value of c = : 21
Line 6 - %= Operator, Value of c = : 11
Line 7 - <<= Operator, Value of c = : 44
Line 8 - >>= Operator, Value of c = : 11
Line 9 - &= Operator, Value of c = : 2
Line 10 - ^= Operator, Value of c = : 0
Line 11 - |= Operator, Value of c = : 2
Bitwise operators are used to perform operations at the bit level on integer data types. These operations work on direct manipulation of bits, such as low-level programming, graphics, and cryptography.
List of C++ Bitwise operators
The Bitwise operators supported by C++ language are listed in the following table. Assume variable A holds 60 and variable B holds 13, then
Operator
Description
Example
&
Binary AND Operator copies a bit to the result if it exists in both operands.
(A & B) will give 12 which is 0000 1100
|
Binary OR Operator copies a bit if it exists in either operand.
(A | B) will give 61 which is 0011 1101
^
Binary XOR Operator copies the bit if it is set in one operand but not both.
(A ^ B) will give 49 which is 0011 0001
~
Binary Ones Complement Operator is unary and has the effect of ‘flipping’ bits.
(~A ) will give -61 which is 1100 0011 in 2’s complement form due to a signed binary number.
<<
Binary Left Shift Operator. The left operands value is moved left by the number of bits specified by the right operand.
A << 2 will give 240 which is 1111 0000
>>
Binary Right Shift Operator. The left operands value is moved right by the number of bits specified by the right operand.
A >> 2 will give 15 which is 0000 1111
Example of Bitwise Operators
Try the following example to understand all the bitwise operators available in C++.
Copy and paste the following C++ program in test.cpp file and compile and run this program.
#include <iostream>usingnamespace std;main(){unsignedint a =60;// 60 = 0011 1100 unsignedint b =13;// 13 = 0000 1101int 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 ;return0;}
When the above code is compiled and executed, it produces the following result −
Line 1 - Value of c is : 12
Line 2 - Value of c is: 61
Line 3 - Value of c is: 49
Line 4 - Value of c is: -61
Line 5 - Value of c is: 240
Line 6 - Value of c is: 15
Logical operators perform logical operations on Boolean values or expressions. These operators are used to combine two or more conditions and help in decision-making.
Types of Logical Operators
C++ provides three logical operators:
Logical AND (&&)
Logical OR (||)
Logical NOT (!)
1. Logical AND (&&)
The logical AND operator returns true only if both operands are true. If any operand is false, the result is false.
The syntax of logical AND is:
condition_1 && condition 2
2. Logical OR (||)
The logical OR operator returns true if at least one of the conditions is true. If both are false, it returns false.
The syntax of logical OR is:
condition_1 || condition 2
3. Logical NOT (!)
The logical NOT operator negates the given condition. If a condition is true, it returns false and vice versa.
The syntax of logical NOT is:
!condition
Example of Logical Operators
Try the following example to understand all the logical operators available in C++.
Copy and paste the following C++ program in test.cpp file and compile and run this program.
#include <iostream>usingnamespace std;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 ;}/* Let's 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 ;}return0;}
When the above code is compiled and executed, it produces the following result −
Line 1 - Condition is true
Line 2 - Condition is true
Line 4 - Condition is not true
Line 5 - Condition is true
In C++, relational operators are used to compare values or expressions. These check the relationship between the operands and return a result in a boolean (true or false).
These comparisons are based on conditions like equality, inequality, greater than, less than, etc.
Relational operators are a fundamental part of a programming language as they help in decision-making, loops, and conditional checks.
List of Relational Operators
This is the following list of the relational operators in C++ −
Equal to (==) − It checks if two values are equal.
Not equal to (!=) − It checks if two values are not equal.
Greater than (>) − It checks if the left operand is greater than the right.
Less than (<) − It checks if the left operand is less than the right.
Greater than or equal to (>=) − It checks if the left operand is greater than or equal to the right.
Less than or equal to (<=) − It checks if the left operand is less than or equal to the right.
Relational Operators Usage
Relational operators are used to compare two values or objects in C++. Here we will see the list of following, where relational operators can be used.
Comparing Integers − It can be used for comparing integer data types like int, long, short, etc.
Comparing Floating-Point Numbers − Relational operators can also be used to compare floating-point numbers (float, double, etc.). However, due to precision issues with floating-point arithmetic, the results may not always be as expected when dealing with very small or very large numbers.
Comparing Characters and Strings − Relational operators compare characters based on their ASCII values. Strings are objects of the std::string class, and relational operators are overloaded to compare them lexicographically (in alphabetical order).
Comparing Objects (Custom Classes) − In C++, you can overload relational operators for custom objects, allowing you to compare instances of a class based on certain criteria.
Example of Relational Operators
The following is an example of relational operators:
In C++, Relational Operators in conditional statements help the program with decision-making and give results (true or false) based on the result of the comparison.
Syntax for if-else with Relational Operators
Here we will see the syntax for if-else with relational operators.
if(a > b){// a is greater than b}elseif(a == b){// a is equal to b}else{// a is less than b}
Syntax for while Loop with Relational Operators
Here we will see the syntax for while loop with relational operators.
int i =1;while(i <=5){if(i <5){// i is less than 5}elseif(i ==5){// i is equal to 5}
i++;}
Relational Operators with Logical Operators
In C++, relational operators (>, <, ==, !=, >=, <=) can be combined with logical operators (&&, ||, !) to form complex expressions, which allow for more advanced decision-making. this is helpful when you need to check multiple conditions in one expression.
Example
#include <iostream>usingnamespace std;intmain(){int age =25, height =180;// Check if age is between 18 and 30 and height is greater than 170if(age >=18&& age <=30&& height >170)
cout <<"The person qualifies!"<< endl;// Check if age is outside 18-30 or height is <= 170if(age <18|| age >30|| height <=170)
cout <<"The person does not qualify!"<< endl;// Check if age is NOT between 18 and 30 or height is NOT > 170if(!(age >=18&& age <=30)||!(height >170))
cout <<"The person does not qualify due to NOT condition!"<< endl;return0;}
Output
The person qualifies!
Limitations of Relational Operators
Precision issues with floating-point comparisons (e.g., float or double types may not behave as expected due to rounding errors).
Comparing non-numeric types (e.g., comparing objects, strings, or custom classes might need custom operator overloads).
Ambiguities in complex expressions where the order of evaluation or operator precedence can lead to unintended results.
Type coercion when using relational operators with mixed data types (e.g., comparing int and double).
Try the following example to understand all the arithmetic operators available in C++.
Copy and paste the following C++ program in test.cpp file and compile and run this program.
#include <iostream>usingnamespace std;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 ;
c = a++;
cout <<"Line 6 - Value of c is :"<< c << endl ;
c = a--;
cout <<"Line 7 - Value of c is :"<< c << endl ;return0;}
When the above code is compiled and executed, it produces the following result −
Line 1 - Value of c is :31
Line 2 - Value of c is :11
Line 3 - Value of c is :210
Line 4 - Value of c is :2
Line 5 - Value of c is :1
Line 6 - Value of c is :21
Line 7 - Value of c is :22
An operator is a symbol that tells the compiler to perform specific mathematical or logical manipulations. C++ is rich in built-in operators and provide the following types of operators −
Arithmetic Operators
Relational Operators
Logical Operators
Bitwise Operators
Assignment Operators
Misc Operators
This chapter will examine the arithmetic, relational, logical, bitwise, assignment and other operators one by one.
Arithmetic Operators
Arithmetic operators in C++ are the basic operators, which are used for basic mathematical or arithmetical operations on operands. These operators are essential for performing calculations and manipulating data within a program.
There are following arithmetic operators supported by C++ language −
Assume variable A holds 10 and variable B holds 20, then −
Operator
Description
Example
+
Adds two operands
A + B will give 30
–
Subtracts second operand from the first
A – B will give -10
*
Multiplies both operands
A * B will give 200
/
Divides numerator by de-numerator
B / A will give 2
%
Modulus Operator and remainder of after an integer division
The following is an example of arithmetic operators −
#include <iostream>usingnamespace std;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 ;
c = a++;
cout <<"Line 6 - Value of c is :"<< c << endl ;
c = a--;
cout <<"Line 7 - Value of c is :"<< c << endl ;return0;}
Output
Line 1 - Value of c is :31
Line 2 - Value of c is :11
Line 3 - Value of c is :210
Line 4 - Value of c is :2
Line 5 - Value of c is :1
Line 6 - Value of c is :21
Line 7 - Value of c is :22
Relational Operators
Relational operators are used to compare two values or expressions. These operators return a boolean value − true if the comparison is correct, and else false.
They are essential for making decisions and controlling the flow of a program based on conditions.
There are following relational operators supported by C++ language
Assume variable A holds 10 and variable B holds 20, then −
Operator
Description
Example
==
Checks if the values of two operands are equal or not, if yes then condition becomes true.
(A == B) is not true.
!=
Checks if the values of two operands are equal or not, if values are not equal then condition becomes true.
(A != B) is true.
>
Checks if the value of left operand is greater than the value of right operand, if yes then condition becomes true.
(A > B) is not true.
<
Checks if the value of left operand is less than the value of right operand, if yes then condition becomes true.
(A < B) is true.
>=
Checks if the value of left operand is greater than or equal to the value of right operand, if yes then condition becomes true.
(A >= B) is not true.
<=
Checks if the value of left operand is less than or equal to the value of right operand, if yes then condition becomes true.
(A <= B) is true.
Example
The following is an example of relational operators −
#include <iostream>usingnamespace std;main(){int a =21;int b =10;int c ;if( a == b ){
cout <<"Line 1 - a is equal to 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 ;}/* Let's change the values of a and b */
a =5;
b =20;if( a <= b ){
cout <<"Line 4 - a is either less than \ or equal to b"<< endl ;}if( b >= a ){
cout <<"Line 5 - b is either greater than \ or equal to b"<< endl ;}return0;}
Output
Line 1 - a is not equal to b
Line 2 - a is not less than b
Line 3 - a is greater than b
Line 4 - a is either less than or equal to b
Line 5 - b is either greater than or equal to b
Logical Operators
Logical operators are used to perform logical operations on boolean values (true or false). These operators are essential for controlling the flow of a program based on conditions. There are three primary logical operators in C++ as mentioned below −
There are following logical operators supported by C++ language.
Assume variable A holds 1 and variable B holds 0, then −
Operator
Description
Example
&&
Called Logical AND operator. If both the operands are non-zero, then condition becomes true.
(A && B) is false.
||
Called Logical OR Operator. If any of the two operands is non-zero, then condition becomes true.
(A || B) is true.
!
Called Logical NOT Operator. Use to reverses the logical state of its operand. If a condition is true, then Logical NOT operator will make false.
!(A && B) is true.
Example
The following is an example of logical operators −
#include <iostream>usingnamespace std;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 ;}/* Let's 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 ;}return0;}
Output
Line 1 - Condition is true
Line 2 - Condition is true
Line 4 - Condition is not true
Line 5 - Condition is true
Bitwise Operators
Bitwise operators are used to perform operations at the bit level on integer data types. These operations work on direct manipulation of bits, such as low-level programming, graphics, and cryptography.
Bitwise operator works on bits and perform bit-by-bit operation. The truth tables for &, |, and ^ are as follows −
p
q
p & q
p | q
p ^ q
0
0
0
0
0
0
1
0
1
1
1
1
1
1
0
1
0
0
1
1
Assume if A = 60; and B = 13; now in binary format they will be as follows −
A = 0011 1100
B = 0000 1101
—————–
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
The Bitwise operators supported by C++ language are listed in the following table. Assume variable A holds 60 and variable B holds 13, then −
Operator
Description
Example
&
Binary AND Operator copies a bit to the result if it exists in both operands.
(A & B) will give 12 which is 0000 1100
|
Binary OR Operator copies a bit if it exists in either operand.
(A | B) will give 61 which is 0011 1101
^
Binary XOR Operator copies the bit if it is set in one operand but not both.
(A ^ B) will give 49 which is 0011 0001
~
Binary Ones Complement Operator is unary and has the effect of ‘flipping’ bits.
(~A ) will give -61 which is 1100 0011 in 2’s complement form due to a signed binary number.
<<
Binary Left Shift Operator. The left operands value is moved left by the number of bits specified by the right operand.
A << 2 will give 240 which is 1111 0000
>>
Binary Right Shift Operator. The left operands value is moved right by the number of bits specified by the right operand.
A >> 2 will give 15 which is 0000 1111
Example
The following is an example of bitwise operators −
#include <iostream>usingnamespace std;main(){unsignedint a =60;// 60 = 0011 1100 unsignedint b =13;// 13 = 0000 1101int 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 ;return0;}
Output
Line 1 - Value of c is : 12
Line 2 - Value of c is: 61
Line 3 - Value of c is: 49
Line 4 - Value of c is: -61
Line 5 - Value of c is: 240
Line 6 - Value of c is: 15
Assignment Operators
Assignment operators are used to assign values to variables. These operators allow you to set or update the value stored in a variable.
There are following assignment operators supported by C++ language −
Operator
Description
Example
=
Simple assignment operator, Assigns values from right side operands to left side operand.
C = A + B will assign value of A + B into C
+=
Add AND assignment operator, It adds right operand to the left operand and assign the result to left operand.
C += A is equivalent to C = C + A
-=
Subtract AND assignment operator, It subtracts right operand from the left operand and assign the result to left operand.
C -= A is equivalent to C = C – A
*=
Multiply AND assignment operator, It multiplies right operand with the left operand and assign the result to left operand.
C *= A is equivalent to C = C * A
/=
Divide AND assignment operator, It divides left operand with the right operand and assign the result to left operand.
C /= A is equivalent to C = C / A
%=
Modulus AND assignment operator, It takes modulus using two operands and assign the result to left operand.
C %= A is equivalent to C = C % A
<<=
Left shift AND assignment operator.
C <<= 2 is same as C = C << 2
>>=
Right shift AND assignment operator.
C >>= 2 is same as C = C >> 2
&=
Bitwise AND assignment operator.
C &= 2 is same as C = C & 2
^=
Bitwise exclusive OR and assignment operator.
C ^= 2 is same as C = C ^ 2
|=
Bitwise inclusive OR and assignment operator.
C |= 2 is same as C = C | 2
Example
The following is an example of assignment operators −
#include <iostream>usingnamespace std;main(){int a =21;int c ;
c = a;
cout <<"Line 1 - = Operator, Value of c = : "<<c<< endl ;
c += a;
cout <<"Line 2 - += Operator, Value of c = : "<<c<< endl ;
c -= a;
cout <<"Line 3 - -= Operator, Value of c = : "<<c<< endl ;
c *= a;
cout <<"Line 4 - *= Operator, Value of c = : "<<c<< endl ;
c /= a;
cout <<"Line 5 - /= Operator, Value of c = : "<<c<< endl ;
c =200;
c %= a;
cout <<"Line 6 - %= Operator, Value of c = : "<<c<< endl ;
c <<=2;
cout <<"Line 7 - <<= Operator, Value of c = : "<<c<< endl ;
c >>=2;
cout <<"Line 8 - >>= Operator, Value of c = : "<<c<< endl ;
c &=2;
cout <<"Line 9 - &= Operator, Value of c = : "<<c<< endl ;
c ^=2;
cout <<"Line 10 - ^= Operator, Value of c = : "<<c<< endl ;
c |=2;
cout <<"Line 11 - |= Operator, Value of c = : "<<c<< endl ;return0;}
Output
Line 1 - = Operator, Value of c = : 21
Line 2 - += Operator, Value of c = : 42
Line 3 - -= Operator, Value of c = : 21
Line 4 - *= Operator, Value of c = : 441
Line 5 - /= Operator, Value of c = : 21
Line 6 - %= Operator, Value of c = : 11
Line 7 - <<= Operator, Value of c = : 44
Line 8 - >>= Operator, Value of c = : 11
Line 9 - &= Operator, Value of c = : 2
Line 10 - ^= Operator, Value of c = : 0
Line 11 - |= Operator, Value of c = : 2
Misc Operators
Miscellaneous operators, often abbreviated as “misc operators”, include a variety of operators that dont fit neatly into other categories like arithmetic or logical operators. Here are some common miscellaneous operators and their definitions −
The following table lists some other operators that C++ supports.
Sr.No
Operator & Description
1
sizeofsizeof operator returns the size of a variable. For example, sizeof(a), where a is integer, and will return 4.
2
Condition ? X : YConditional operator (?). If Condition is true then it returns value of X otherwise returns value of Y.
3
,Comma operator causes a sequence of operations to be performed. The value of the entire comma expression is the value of the last expression of the comma-separated list.
4
. (dot) and -> (arrow)Member operators are used to reference individual members of classes, structures, and unions.
5
CastCasting operators convert one data type to another. For example, int(2.2000) would return 2.
6
&Pointer operator & returns the address of a variable. For example &a; will give actual address of the variable.
7
*Pointer operator * is pointer to a variable. For example *var; will pointer to a variable var.
Conditional (Ternary) Operator (?:)
It is a shorthand way to perform a conditional evaluation in C++.
int a =10, b =20;int result =(a > b)? a : b;// result will be 20 because a is not greater than b
cout <<"The greater value is: "<< result << endl;
Output
The greater value is: 20
Sizeof Operator
The sizeof operator returns the size, in bytes, of a variable or data type.
int x =5;
cout <<"Size of int: "<<sizeof(x)<<" bytes"<< endl;
cout <<"Size of double: "<<sizeof(double)<<" bytes"<< endl;
Output
4
8
Bitwise Complement Operator (~)
The bitwise complement operator inverts the bits of its operand.
unsignedint num =5;// Binary: 00000000 00000000 00000000 00000101unsignedint result =~num;// Binary: 11111111 11111111 11111111 11111010
cout <<"Bitwise complement of 5: "<< result << endl;// Outputs a large positive number due to unsigned
Scope Resolution Operator (::)
This operator is used to define the scope of a function or variable, particularly in the context of classes and namespaces.
classMyClass{public:staticint value;};int MyClass::value =10;// Define static member outside the class
cout <<"Static value: "<< MyClass::value << endl;
Output
10
Operators Precedence in C++
Operator precedence determines the grouping of terms in an expression. This affects how an expression is evaluated. Certain operators have higher precedence than others; for example, the multiplication operator has higher precedence than the addition operator −
For example x = 7 + 3 * 2; here, x is assigned 13, not 20 because operator * has higher precedence than +, so it first gets multiplied with 3*2 and then adds into 7.
Here, operators with the highest precedence appear at the top of the table, those with the lowest appear at the bottom. Within an expression, higher precedence operators will be evaluated first.
Category
Operator
Associativity
Postfix
() [] -> . ++ – –
Left to right
Unary
+ – ! ~ ++ – – (type)* & sizeof
Right to left
Multiplicative
* / %
Left to right
Additive
+ –
Left to right
Shift
<< >>
Left to right
Relational
< <= > >=
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
Conditional
?:
Right to left
Assignment
= += -= *= /= %=>>= <<= &= ^= |=
Right to left
Comma
,
Left to right
Example
The following is an example of demonstrating operators precedence −
#include <iostream>usingnamespace std;main(){int a =20;int b =10;int c =15;int d =5;int e;
e =(a + b)* c / d;// ( 30 * 15 ) / 5
cout <<"Value of (a + b) * c / d is :"<< e << endl ;
e =((a + b)* c)/ d;// (30 * 15 ) / 5
cout <<"Value of ((a + b) * c) / d is :"<< e << endl ;
e =(a + b)*(c / d);// (30) * (15/5)
cout <<"Value of (a + b) * (c / d) is :"<< e << endl ;
e = a +(b * c)/ d;// 20 + (150/5)
cout <<"Value of a + (b * c) / d is :"<< e << endl ;return0;}
Output
Value of (a + b) * c / d is :90
Value of ((a + b) * c) / d is :90
Value of (a + b) * (c / d) is :90
Value of a + (b * c) / d is :50
The C++ standard library does not provide a proper date type. C++ inherits the structs and functions for date and time manipulation from C. To access date and time related functions and structures, you would need to include <ctime> header file in your C++ program.
There are four time-related types: clock_t, time_t, size_t, and tm. The types – clock_t, size_t and time_t are capable of representing the system time and date as some sort of integer.
The structure type tm holds the date and time in the form of a C structure having the following elements −
structtm{int tm_sec;// seconds of minutes from 0 to 61int tm_min;// minutes of hour from 0 to 59int tm_hour;// hours of day from 0 to 24int tm_mday;// day of month from 1 to 31int tm_mon;// month of year from 0 to 11int tm_year;// year since 1900int tm_wday;// days since sundayint tm_yday;// days since January 1stint tm_isdst;// hours of daylight savings time}
Following are the important functions, which we use while working with date and time in C or C++. All these functions are part of standard C and C++ library and you can check their detail using reference to C++ standard library given below.
Sr.No
Function & Purpose
1
time_t time(time_t *time);This returns the current calendar time of the system in number of seconds elapsed since January 1, 1970. If the system has no time, .1 is returned.
2
char *ctime(const time_t *time);This returns a pointer to a string of the form day month year hours:minutes:seconds year\n\0.
3
struct tm *localtime(const time_t *time);This returns a pointer to the tm structure representing local time.
4
clock_t clock(void);This returns a value that approximates the amount of time the calling program has been running. A value of .1 is returned if the time is not available.
5
char * asctime ( const struct tm * time );This returns a pointer to a string that contains the information stored in the structure pointed to by time converted into the form: day month date hours:minutes:seconds year\n\0
6
struct tm *gmtime(const time_t *time);This returns a pointer to the time in the form of a tm structure. The time is represented in Coordinated Universal Time (UTC), which is essentially Greenwich Mean Time (GMT).
7
time_t mktime(struct tm *time);This returns the calendar-time equivalent of the time found in the structure pointed to by time.
8
double difftime ( time_t time2, time_t time1 );This function calculates the difference in seconds between time1 and time2.
9
size_t strftime();This function can be used to format date and time in a specific format.
Current Date and Time
Suppose you want to retrieve the current system date and time, either as a local time or as a Coordinated Universal Time (UTC).
Example
Following is the example to achieve the same −
#include <iostream>#include <ctime>usingnamespace std;intmain(){// current date/time based on current system
time_t now =time(0);// convert now to string formchar* dt =ctime(&now);
cout <<"The local date and time is: "<< dt << endl;// convert now to tm struct for UTC
tm *gmtm =gmtime(&now);
dt =asctime(gmtm);
cout <<"The UTC date and time is:"<< dt << endl;}
When the above code is compiled and executed, it produces the following result −
The local date and time is: Sat Jan 8 20:07:41 2011
The UTC date and time is:Sun Jan 9 03:07:41 2011
Format Time using struct tm
The tm structure is very important while working with date and time in either C or C++. This structure holds the date and time in the form of a C structure as mentioned above. Most of the time related functions makes use of tm structure. Following is an example which makes use of various date and time related functions and tm structure −
While using structure in this chapter, I’m making an assumption that you have basic understanding on C structure and how to access structure members using arrow -> operator.
Example
#include <iostream>#include <ctime>usingnamespace std;intmain(){// current date/time based on current system
time_t now =time(0);
cout <<"Number of sec since January 1,1970 is:: "<< now << endl;
tm *ltm =localtime(&now);// print various components of tm structure.
cout <<"Year:"<<1900+ ltm->tm_year<<endl;
cout <<"Month: "<<1+ ltm->tm_mon<< endl;
cout <<"Day: "<< ltm->tm_mday << endl;
cout <<"Time: "<<5+ltm->tm_hour <<":";
cout <<30+ltm->tm_min <<":";
cout << ltm->tm_sec << endl;}
When the above code is compiled and executed, it produces the following result −
Number of sec since January 1,1970 is:: 1588485717
Year:2020
Month: 5
Day: 3
Time: 11:31:57