**<< (left shift) **Takes two numbers, left shifts the bits of the first operand, the second operand decides the number of places to shift. Or in other words left shifting an integer “x” with an integer “y” (x<<y) is equivalent to multiplying x with 2^y (2 raise to power y).

## CPP

`/* C++ Program to demonstrate use of left shift ` ` ` `operator */` `#include<stdio.h>` `int` `main()` `{` ` ` `// a = 5(00000101), b = 9(00001001)` ` ` `unsigned ` `char` `a = 5, b = 9; ` ` ` `// The result is 00001010 ` ` ` `printf` `(` `"a<<1 = %d\n"` `, a<<1);` ` ` ` ` `// The result is 00010010 ` ` ` `printf` `(` `"b<<1 = %d\n"` `, b<<1); ` ` ` `return` `0;` `}` |

*chevron_right*

*filter_none*

**Output**

a<<1 = 10 b<<1 = 18

**>> (right shift) **Takes two numbers, right shifts the bits of the first operand, the second operand decides the number of places to shift.Similarly right shifting (x>>y) is equivalent to dividing x with 2^y.

## CPP

`/* C++ Program to demonstrate use of right` ` ` `shift operator */` `#include <stdio.h>` `using` `namespace` `std;` `int` `main()` `{` ` ` `// a = 5(00000101), b = 9(00001001)` ` ` `unsigned ` `char` `a = 5, b = 9;` ` ` `// The result is 00000010` ` ` `printf` `(` `"a>>1 = %d\n"` `, a >> 1);` ` ` `// The result is 00000100` ` ` `printf` `(` `"b>>1 = %d\n"` `, b >> 1);` ` ` `return` `0;` `}` |

*chevron_right*

*filter_none*

**Output**

a>>1 = 2 b>>1 = 4

**Important Points : **

- The left shift and right shift operators should not be used for negative numbers. The result of is undefined behaviour if any of the operands is a negative number. For example results of both -1 << 1 and 1 << -1 is undefined.
- If the number is shifted more than the size of integer, the behaviour is undefined. For example, 1 << 33 is undefined if integers are stored using 32 bits. For bit shift of larger values 1ULL<<62
**ULL**is used for Unsigned Long Long which is defined using 64 bits which can store large values. - The left-shift by 1 and right-shift by 1 are equivalent to the product of first term and 2 to the power given element(1<<3 = 1*pow(2,3)) and division of first term and second term raised to power 2 (1>>3 = 1/pow(2,3)) respectively.

As mentioned in point 1, it works only if numbers are positive.

## C

`#include <stdio.h>` `int` `main()` `{` ` ` `int` `x = 19;` ` ` `unsigned ` `long` `long` `y = 19;` ` ` `printf` `(` `"x << 1 = %d\n"` `, x << 1);` ` ` `printf` `(` `"x >> 1 = %d\n"` `, x >> 1);` ` ` `// shift y by 61 bits left` ` ` `printf` `(` `"y << 61 = %lld\n"` `, y << 61);` ` ` `return` `0;` `}` |

*chevron_right*

*filter_none*

**Output**

x << 1 = 38 x >> 1 = 9 y << 61 = 6917529027641081856

- The left-shift of 1 by i is equivalent to 2 raised to power i.

As mentioned in point 1, it works only if numbers are positive.

## C

`#include<stdio.h>` `int` `main()` `{ ` ` ` `int` `i = 3; ` ` ` `printf` `(` `"pow(2, %d) = %d\n"` `, i, 1 << i);` ` ` `i = 4; ` ` ` `printf` `(` `"pow(2, %d) = %d\n"` `, i, 1 << i);` ` ` `return` `0;` `}` |

*chevron_right*

*filter_none*

**Output**

pow(2, 3) = 8 pow(2, 4) = 16

Interesting Facts about Bitwise Operators in C

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.