# Operators

**Operators** are used to perform operations on variables and values. They are symbols that tell the compiler to perform specific mathematical or logical functions. The C language provides the following types of operators:

- Arithmetic Operators
- Relational Operators
- Logical Operators
- Bitwise Operators
- Assignment Operators
- Misc Operators

## Arithmetic Operators

C has the following basic arithmetic operators to perform common mathematical operations:

Operator | Name | Description |
---|---|---|

`+` |
Addition | `x + y` returns the sum of `x` and `y` |

`-` |
Subtraction | `x - y` returns the difference of `x` and `y` |

`*` |
Multiplication | `x * y` returns the product of `x` and `y` |

`/` |
Division | `x / y` returns the quotient of `x` and `y` |

`%` |
Modulo | `x % y` returns the integer remainder of `x` divided by `y` |

`++` |
Increment | `x++` returns `x + 1` |

`--` |
Decrement | `x--` returns `x - 1` |

int x = 0;x = x + 4; // x is now 4x = x - 1; // x is now 3x = x * 8; // x is now 24x = x / 4; // x is now 6x = x % 4; // x is now 2x++; // x is now 3x--; // x is now 2

## Relational Operators

Relational operators compare two values and return `true`

or `false`

.

Operator | Name | Description |
---|---|---|

`==` |
Equal | `x == y` is `true` if `x` and `y` are equal. |

`!=` |
Not Equal | `x != y` is `true` if `x` and `y` are not equal. |

`<` |
Less Than | `x < y` is `true` if `x` is less than `y` . |

`>` |
Greater Than | `x > y` is `true` if `x` is greater than `y` . |

`<=` |
Less Than or Equal to | `x <= y` is `true` if `x` is less than or equal to `y` . |

`>=` |
Greater Than or Equal to | `x >= y` is `true` if `x` is greater than or equal to `y` . |

int x = 7;int y = 5;if (x > y) {// This code will run.}if (x == y) {// This code won't run.}

## Logical Operators

Logical operators operate on boolean values and return boolean values.

Operator | Name | Description |
---|---|---|

`!` |
Not | `!x` is `true` when `x` is `false` and `false` when `x` is `true` . |

`&&` |
And | `x && y` is `true` only if `x` and `y` are both `true` . |

`||` |
Or | `x || y` is `true` if either `x` or `y` is `true` . |

int x = 7;int y = 5;if (x > y \|\| x == y) {// This code will run.}if (x == y && x < 0) {// This code won't run.}

## Bitwise Operators

Bitwise operators manipulate individual bits in an integer.

Operator | Name | Description |
---|---|---|

`&` |
And | Result has bit set only where both operands have that bit set. |

`|` |
Or | Result has bit set if either operand has that bit set. |

`^` |
Xor | Result has bit set only if only one operand has that bit set. |

`~` |
Not | Takes a single operand and inverts each bit in it. |

`<<` |
Left shift | `a << b` means `a` ‘s bits are shifted to the left `b` spaces. |

`>>` |
Right shift | `a >> b` means `a` ‘s bits are shifted to the right `b` spaces. |

int x;x = 19 & 7;// x is 3 : 10011 & 00111 = 00011x = 19 | 7;// x is 23 : 10011 | 00111 = 10111x = 19 ^ 7;x is 20 : 10011 ^ 00111 = 10100x = 7 << 2;// x is 28 : 00111 << 2 = 11100x = 19 >> 2;// x is 4 : 10011 >> 2 = 00100

## Assignment Operators

Assignment operators assign the value on the right to the variable on the left.

Operator | Name | Description |
---|---|---|

`=` |
Assignment | `a = 3` assigns value `3` to variable `a` . |

`+=` |
Addition Assignment | `a += 3` is short for `a = a + 3` . |

`-=` |
Subtraction Assignment | `a -= 3` is short for `a = a - 3` . |

`*=` |
Multiplication Assignment | `a *= 3` is short for `a = a * 3` . |

`/=` |
Division Assignment | `a /= 3` is short for `a = a / 3` . |

`%=` |
Modulo Assignment | `a %= 3` is short for `a = a % 3` . |

`&=` |
And Assignment | `a &= 3` is short for `a = a & 3` . |

`|=` |
Or Assignment | `a |= 3` is short for `a = a | 3` . |

`^=` |
Xor Assignment | `a ^= 3` is short for `a = a ^ 3` . |

`<<=` |
Left Shift Assignment | `a <<= 3` is short for `a = a << 3` . |

`>>=` |
Right Shift Assignment | `a >>= 3` is short for `a = a >> 3` . |

## Misc Operators

Misc operators don’t fit into a particular category.

Operator | Name | Description |
---|---|---|

`sizeof()` |
Addition Assignment | `sizeof(x)` returns the size of variable `x` . |

`&` |
Address | `&x` returns the address of variable `x` . |

`*` |
Pointer | `*x` returns a pointer to variable `x` . Not to be confused with multiplication. |

`?:` |
Conditional Operator | `expression?x:y` returns `x` when `expression` is `true` , `y` otherwise. |