In this tutorial, you will learn about the various operators available in C++. An operator is a symbol that tell the compiler to perform certain operation on variables. Let’s consider the following six categories of operators:

- Arithmetic Operators
- Relational Operators
- Logical Operators
- Bitwise Operators
- Assignment Operators
- Other Operators

**1. Arithmetic Operators**

These are operators used to perform arithmetic operations. For example if x = 10 and y = 20, then the table below show the results of various arithmetic operators

Operator | Brief Description | Example |
---|---|---|

Addition (+) | Adds two operands | x + y will give 30 |

Subtraction(-) | Subtracts second operand from the first | x – y will give -10 |

Multiplication(*) | Multiplies both operands | x * y will give 200 |

Division(/) | Divides numerator by de-numerator | y / x will give 2 |

Modulus(%) | Gives remainder of after an integer division | y % x will give 0 |

Increment(++) | Increases integer value by one | x++ will give 11 |

Decrement(–) | Decreases integer value by one | x– will give 9 |

**2. Relational Operators**

These are sometimes called comparison operators. They compare two operand and returns either true or false based on the result. So if x = 10 and y = 10, then the table below show the results of various relational operators

Operator | Brief Description | Example |
---|---|---|

== | Checks whether the values of two operands are equal, if yes then the condition becomes true. | (x == y) is not true. |

!= | Checks whether the values of two operands are equal, if values are not equal then the condition becomes true. | (x != y) is true. |

> | Checks whether the value of left operand is greater than the value of right operand, if so, then the condition becomes true. | (x > y) is not true. |

< | Checks whether the value of left operand is less than the value of right operand, if so, then the condition becomes true. | (x < y) is true. |

>= | Checks whether the value of left operand is greater than or equal to the value of right operand, if so then the condition becomes true. | (x >= y) is not true. |

<= | Checks whether the value of left operand is less than or equal to the value of right operand, if yes then the condition becomes true. | (x <= y) is true. |

**3. Logical Operators**

These are used to do logical comparison of two operands. If x = 1 and y = 0, then:

Operator | Brief Description | Example |
---|---|---|

Logical AND(&&) | If both of the operands are non-zero, then the condition becomes true. | (x && y) is false. |

Logical OR(||) | If any of the two operands is non-zero, then condition evaluates to true. | (x || y) is true. |

:Logical NOT(!) | Use to negate the logical state of its operand. If a condition is true, then the operator will make it false. | !(x && y) is true. |

**4. Bitwise Operators**

These set of operators are used perform operations on individual bits. They are also called binary operators or bit-by-bit operators.

For instance, let x = 60; and y = 13; converting to binary format they will be as follows −

x = 0011 1100

y = 0000 1101

—————–

x & y = 0000 1100

x | y = 0011 1101

x ^ y = 0011 0001

~x = 1100 0011

The table below summarizes bitwise operators.

Operator | Brief Description | Example |
---|---|---|

Binary AND(&) | copies a bit to the result if it exists in both operands. | (x & y) will give 12 which is 0000 1100 |

Binary OR(|) | copies a bit if it exists in either operand. | (x | y) will give 61 which is 0011 1101 |

Binary XOR(^) | copies the bit if it is set in one operand but not both. | (x ^ y) will give 49 which is 0011 0001 |

Binary 1s complement(~) | a unary and has the effect of ‘flipping’ bits. | (~x ) will give -61 which is 1100 0011 in 2’s complement form due to a signed binary number. |

Binary Left Shift(<<) | shifts the left operands value left by the number of bits specified by the right operand. | x << 2 will give 240 which is 1111 0000 |

Binary Right Shift(>>) | shifts the left operands value right by the number of bits specified by the right operand. | x >> 2 will give 15 which is 0000 1111 |

**5. Assignment Operators**

These are simply used to assign values to variables. Assignment operators are summarized in the table below

Operator | Brief Description | Example |
---|---|---|

Simple Assignment(=) | assigns values from right side operands to left side operand. | z = x + y will assign value of x + y into z |

Add AND Assignment(+=) | adds right operand to the left operand and assign the result to left operand. | z += x is equivalent to z = z + x |

Subtract AND Assignment(-=) | subtracts right operand from the left operand and assign the result to left operand. | z -= x is equivalent to z = z – x |

Multiply AND Assignment(*=) | multiplies right operand with the left operand and assign the result to left operand. | z *= x is equivalent to z = z * x |

Divide AND Assignment(/=) | divides left operand with the right operand and assign the result to left operand. | z /= x is equivalent to z = z / x |

Modulus AND Assignment(%=) | takes modulus using two operands and assign the result to left operand. | z %= x is equivalent to z = z % x |

Left Shift AND Assignment(<<=) | z <<= 2 is same as z = z << 2 | |

Right Shift AND Assignment(>>=) | z >>= 2 is same as z = z >> 2 | |

Bitwise AND Assignment(&=) | z &= 2 is same as z = z & 2 | |

Bitwise XOR Assignment(^=) | z ^= 2 is same as z = z ^ 2 | |

Bitwise OR Assignment(|=) | z |= 2 is same as z = z | 2 |

**6. Other Operators**

There are a few other operators which does not fall under any of the categories discussed. So we group them as ‘other operators’ or ‘misc operators’. They are listed in the table below:

SN | Operator and Description |
---|---|

1 | sizeof operatorreturns the size of a variable. For instance, sizeof(x), where ‘x’ is integer, and will return 4. |

2 | Conditional operator(a ? b : cIf a is true then it returns value of b else, returns value of c |

3 | Comma (,)causes a sequence of operations to be performed. The value of the entire expression becomes the value of the last expression of the comma-separated list. |

4 | Member operators . (dot) and -> (arrow)they are used to reference individual members of classes, structures, and unions. |

5 | Casting operatorsconverts one data type to another. For instance, int(12.75) would return 12. See Data Type Conversion |

6 | Pointer operator &returns the address of a variable. For instance &a; will give actual address of the variable. |

7 | Pointer operator ** is pointer to a variable. For instance *var; will pointer to a variable var. |