Bit Manipulation is a technique used in a variety of problems to get the solution in an optimized way. This technique is very effective from a Competitive Programming point of view. It is all about Bitwise Operators which directly works upon binary numbers or bits of numbers that help the implementation fast. Below are the **Bitwise Operators** that are used:

- Bitwise AND (&)
- Bitwise OR (|)
- Bitwise XOR (^)
- Bitwise NOT (!)

Learn more about Bitwise Operators in this article.

Below are some common bit operations that are frequently used in programming:

__Bitwise Operations__:

__Bitwise Operations__:

Below is the table to illustrate the result when the operation is performed using Bitwise Operators. Here **0s** or **1s** means sequence of **0** or **1** respectively.

Operators | Operations | Result |
---|---|---|

XOR | X ^ 0s | X |

XOR | X ^ 1s | ~X |

XOR | X ^ X | 0 |

AND | X & 0s | 0 |

AND | X & 1s | X |

AND | X & X | X |

OR | X | 0s | X |

OR | X | 1s | 1s |

OR | X | X | X |

__Get Bit__:

__Get Bit__:

This method is used to find the bit at a particular position(say **i**) of the given number **N**. The idea is to find the Bitwise AND of the given number and **2 ^{i}** that can be represented as

**(1 << i)**. If the value return is

**1**then the bit at the

**i**is set. Otherwise, it is unset.

^{th}positionBelow is the pseudo-code for the same:

## C++

`// Function to get the bit at the` `// ith position` `boolean getBit(` `int` `num, ` `int` `i)` `{` ` ` `// Return true if the bit is` ` ` `// set. Otherwise return false` ` ` `return` `((num & (1 << i)) != 0);` `}` |

## Java

`// Function to get the bit at the` `// ith position` `static` `boolean` `getBit(` `int` `num, ` `int` `i)` `{` ` ` `// Return true if the bit is` ` ` `// set. Otherwise return false` ` ` `return` `((num & (` `1` `<< i)) != ` `0` `);` `}` `// This code is contributed by rishavmahato348.` |

## C#

`// Function to get the bit at the` `// ith position` `static` `bool` `getBit(` `int` `num, ` `int` `i)` `{` ` ` `// Return true if the bit is` ` ` `// set. Otherwise return false` ` ` `return` `((num & (1 << i)) != 0);` `}` `// This code is contributed by subhammahato348.` |

__Set Bit__:

__Set Bit__:

This method is used to set the bit at a particular position(say **i**) of the given number **N**. The idea is to update the value of the given number **N** to the **Bitwise OR** of the given number **N** and **2 ^{i}** that can be represented as

**(1 << i)**. If the value return is

**1**then the bit at the

**i**is set. Otherwise, it is unset.

^{th}positionBelow is the pseudo-code for the same:

## C++

`// Function to set the ith bit of the` `// given number num` `int` `setBit(` `int` `num, ` `int` `i)` `{` ` ` `// Sets the ith bit and return` ` ` `// the updated value` ` ` `return` `num | (1 << i);` `}` |

## Java

`// Function to set the ith bit of the` `// given number num` `static` `int` `setBit(` `int` `num, ` `int` `i)` `{` ` ` `// Sets the ith bit and return` ` ` `// the updated value` ` ` `return` `num | (` `1` `<< i);` `}` `// This code is contributed by subhammahato348` |

## C#

`// Function to set the ith bit of the` `// given number num` `static` `int` `setBit(` `int` `num, ` `int` `i)` `{` ` ` `// Sets the ith bit and return` ` ` `// the updated value` ` ` `return` `num | (1 << i);` `}` |

__Clear Bit__:

__Clear Bit__:

This method is used to clear the bit at a particular position(say **i**) of the given number **N**. The idea is to update the value of the given number **N** to the **Bitwise AND** of the given number **N** and the compliment of **2 ^{i}** that can be represented as

**~(1 << i)**. If the value return is

**1**then the bit at the

**i**is set. Otherwise, it is unset.

^{th}positionBelow is the pseudo-code for the same:

## C++

`// Function to clear the ith bit of` `// the given number N` `int` `clearBit(` `int` `num, ` `int` `i)` `{` ` ` `// Create the mask for the ith` ` ` `// bit unset` ` ` `int` `mask = ~(1 << i);` ` ` `// Return the update value` ` ` `return` `num & mask;` `}` |

Below is the program that implements the above functionalities:

## C++

`// C++ program to implement all the` `// above functionalities` `#include "bits/stdc++.h"` `using` `namespace` `std;` `// Function to get the bit at the` `// ith position` `bool` `getBit(` `int` `num, ` `int` `i)` `{` ` ` `// Return true if the ith bit is` ` ` `// set. Otherwise return false` ` ` `return` `((num & (1 << i)) != 0);` `}` `// Function to set the ith bit of the` `// given number num` `int` `setBit(` `int` `num, ` `int` `i)` `{` ` ` `// Sets the ith bit and return` ` ` `// the updated value` ` ` `return` `num | (1 << i);` `}` `// Function to clear the ith bit of` `// the given number N` `int` `clearBit(` `int` `num, ` `int` `i)` `{` ` ` `// Create the mask for the ith` ` ` `// bit unset` ` ` `int` `mask = ~(1 << i);` ` ` `// Return the update value` ` ` `return` `num & mask;` `}` `// Driver Code` `int` `main()` `{` ` ` `// Given number N` ` ` `int` `N = 70;` ` ` `cout << ` `"The bit at the 3rd position is: "` ` ` `<< (getBit(N, 3) ? ` `'1'` `: ` `'0'` `)` ` ` `<< endl;` ` ` `cout << ` `"The value of the given number "` ` ` `<< ` `" after setting the bit at "` ` ` `<< ` `" MSB is: "` ` ` `<< setBit(N, 0) << endl;` ` ` `cout << ` `"The value of the given number "` ` ` `<< ` `" after clearing the bit at "` ` ` `<< ` `" MSB is: "` ` ` `<< clearBit(N, 0) << endl;` ` ` `return` `0;` `}` |

**Output:**

The bit at the 3rd position is: 0 The value of the given number after setting the bit at MSB is: 71 The value of the given number after clearing the bit at MSB is: 70