Blog

  • C++ Comma Operator

    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;}

    When executed, this program outputs:

    i: 0, j: 5
    i: 1, j: 4
    i: 2, j: 3
    i: 3, j: 2
    i: 4, j: 1
    

    3. Using Comma Operator in Function Arguments

    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;}

    When executed, this program outputs:

    x is greater than y
  • C++ Conditional ? : Operator

    Exp1 ? Exp2 : Exp3;
    

    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 −

    value of x: 40
  • C++ sizeof Operator

    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;}

    When executed, this program outputs:

    Size of Student class: 16 bytes
  • C++ Assignment Operators

    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

    OperatorDescriptionExample
    =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
  • C++ 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.

    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

    OperatorDescriptionExample
    &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
    
  • C++ Logical Operators

    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
  • C++ Relational Operators

    Relational Operators

    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:

    #include <iostream>#include <cmath>  // For floating-point comparison#include <string> usingnamespace std;// Custom class to overload relational operatorsclassPoint{public:int x, y;Point(int x,int y):x(x),y(y){}booloperator>(const Point& p){return(x*x + y*y)>(p.x*p.x + p.y*p.y);}booloperator==(const Point& p){return(x == p.x && y == p.y);}};intmain(){// Comparing Integersint a =5, b =10;
       cout <<(a > b)<<" "<<(a == b)<< endl;// Comparing Floating-Point Numbersdouble x =5.0, y =5.0000001;
       cout <<(fabs(x - y)<1e-6)<< endl;// Comparing Characterschar c1 ='A', c2 ='B';
       cout <<(c1 < c2)<<" "<<(c1 == c2)<< endl;// Comparing Strings
       string str1 ="apple", str2 ="banana";
       cout <<(str1 < str2)<<" "<<(str1 == str2)<< endl;// Comparing Objects
       Point p1(3,4),p2(5,12);
       cout <<(p1 > p2)<<" "<<(p1 == p2)<< endl;return0;}

    Output

    0 0
    1
    1 0
    1 0
    0 0
    

    Relational Operators and Conditional Statements

    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).
  • C++ Arithmetic Operators

    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
  • Operators in C++

    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 −

    OperatorDescriptionExample
    +Adds two operandsA + B will give 30
    Subtracts second operand from the firstA – B will give -10
    *Multiplies both operandsA * B will give 200
    /Divides numerator by de-numeratorB / A will give 2
    %Modulus Operator and remainder of after an integer divisionB % A will give 0
    ++Increment operator, increases integer value by oneA++ will give 11
    Decrement operator, decreases integer value by oneA– will give 9

    Example

    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 −

    OperatorDescriptionExample
    ==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 −

    OperatorDescriptionExample
    &&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 −

    pqp & qp | qp ^ q
    00000
    01011
    11110
    10011

    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 −

    OperatorDescriptionExample
    &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 −

    OperatorDescriptionExample
    =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.NoOperator & Description
    1sizeofsizeof operator returns the size of a variable. For example, sizeof(a), where a is integer, and will return 4.
    2Condition ? 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.
    5CastCasting 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
  • C++ Date and Time

    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.NoFunction & Purpose
    1time_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.
    2char *ctime(const time_t *time);This returns a pointer to a string of the form day month year hours:minutes:seconds year\n\0.
    3struct tm *localtime(const time_t *time);This returns a pointer to the tm structure representing local time.
    4clock_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.
    5char * 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
    6struct 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).
    7time_t mktime(struct tm *time);This returns the calendar-time equivalent of the time found in the structure pointed to by time.
    8double difftime ( time_t time2, time_t time1 );This function calculates the difference in seconds between time1 and time2.
    9size_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