Unset bits in the given range

Given a non-negative number n and two values l and r. The problem is to unset the bits in the range l to r in the binary representation of n, i.e, to unset bits from the rightmost lth bit to the rightmost rth bit.

Constraint: 1 <= l <= r <= number of bits in the binary representation of n.

Examples:

```Input : n = 42, l = 2, r = 5
Output : 32
(42)10 = (101010)2
(32)10 = (100000)2
The bits in the range 2 to 5 in the binary
representation of 42 have been unset.

Input : n = 63, l = 1, r = 4
Output : 48
```

Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: Following are the steps:

1. Calculate num = (1 << (sizeof(int) * 8 – 1)) – 1. This will produce the highest positive integer num. All the bits in num will be set.
2. Toggle bits in the range l to r in num. Refer this post.
3. Now, perform n = n & num. This will unset the bits in the range l to r in n.
4. Return n.

Note: The sizeof(int) has been used as input is of int data type. For large inputs you can use long int or long long int datatypes in place of int.

C/C++

 `// C++ implementation to unset bits in the given range ` `#include ` ` `  `using` `namespace` `std; ` ` `  `// function to toggle bits in the given range ` `unsigned ``int` `toggleBitsFromLToR(unsigned ``int` `n, ` `                                ``unsigned ``int` `l, ` `                                ``unsigned ``int` `r) ` `{ ` `    ``// calculating a number 'num' having 'r' number of bits ` `    ``// and bits in the range l to r are the only set bits ` `    ``int` `num = ((1 << r) - 1) ^ ((1 << (l - 1)) - 1); ` ` `  `    ``// toggle the bits in the range l to r in 'n' ` `    ``// and return the number ` `    ``return` `(n ^ num); ` `} ` ` `  `// function to unset bits in the given range ` `unsigned ``int` `unsetBitsInGivenRange(unsigned ``int` `n, ` `                                   ``unsigned ``int` `l, unsigned ``int` `r) ` `{ ` `    ``// 'num' is the highest positive integer number ` `    ``// all the bits of 'num' are set ` `    ``unsigned ``int` `num = (1 << (``sizeof``(``int``) * 8 - 1)) - 1; ` ` `  `    ``// toggle the bits in the range l to r in 'num' ` `    ``num = toggleBitsFromLToR(num, l, r); ` ` `  `    ``// unset the bits in the range l to r in 'n' ` `    ``// and return the number ` `    ``return` `(n & num); ` `} ` ` `  `// Driver program to test above ` `int` `main() ` `{ ` `    ``unsigned ``int` `n = 42; ` `    ``unsigned ``int` `l = 2, r = 5; ` `    ``cout << unsetBitsInGivenRange(n, l, r); ` `    ``return` `0; ` `} `

Java

 `// Java implementation to unset bits in the given range ` `import` `java.io.*; ` ` `  `class` `GFG  ` `{ ` `    ``// Function to toggle bits in the given range ` `    ``static` `int` `toggleBitsFromLToR(``int` `n, ``int` `l, ``int` `r) ` `    ``{ ` `        ``// calculating a number 'num' having 'r' number of bits ` `        ``// and bits in the range l to r are the only set bits ` `        ``int` `num = ((``1` `<< r) - ``1``) ^ ((``1` `<< (l - ``1``)) - ``1``); ` `  `  `        ``// toggle the bits in the range l to r in 'n' ` `        ``// and return the number ` `        ``return` `(n ^ num); ` `    ``} ` `     `  `    ``// Function to unset bits in the given range ` `    ``static` `int` `unsetBitsInGivenRange(``int` `n, ``int` `l, ``int` `r) ` `    ``{ ` `        ``// 'num' is the highest positive integer number ` `        ``// all the bits of 'num' are set ` `        ``int` `num = (``1` `<< (``4` `* ``8` `- ``1``)) - ``1``; ` `  `  `        ``// toggle the bits in the range l to r in 'num' ` `        ``num = toggleBitsFromLToR(num, l, r); ` `  `  `        ``// unset the bits in the range l to r in 'n' ` `        ``// and return the number ` `        ``return` `(n & num); ` `    ``} ` `     `  `    ``// driver program ` `    ``public` `static` `void` `main (String[] args)  ` `    ``{ ` `        ``int` `n = ``42``; ` `        ``int` `l = ``2``, r = ``5``; ` `        ``System.out.println(unsetBitsInGivenRange(n, l, r)); ` `    ``} ` `} ` ` `  `// Contributed by Pramod Kumar `

Python3

 `# python implementation to unset bits ` `# in the given range ` ` `  `# Function to toggle bits in the ` `# given range ` `def` `toggleBitsFromLToR(n, l, r): ` `     `  `    ``# calculating a number 'num'  ` `    ``# having 'r' number of bits ` `    ``# and bits in the range l to ` `    ``# r are the only set bits ` `    ``num ``=` `(((``1` `<< r) ``-` `1``) ^  ` `           ``((``1` `<< (l ``-` `1``)) ``-` `1``)) ` ` `  `    ``# toggle the bits in the range  ` `    ``# l to r in 'n' and return the  ` `    ``# number ` `    ``return` `(n ^ num) ` `     `  `# Function to unset bits in the ` `# given range ` `def` `unsetBitsInGivenRange(n, l, r): ` `     `  `    ``# 'num' is the highest positive ` `    ``# integer number all the bits ` `    ``# of 'num' are set ` `    ``num ``=` `(``1` `<< (``4` `*` `8` `-` `1``)) ``-` `1` ` `  `    ``# toggle the bits in the range  ` `    ``# l to r in 'num' ` `    ``num ``=` `toggleBitsFromLToR(num, l, r) ` ` `  `    ``# unset the bits in the range  ` `    ``# l to r in 'n' and return the ` `    ``# number ` `    ``return` `(n & num) ` ` `  `# Driver code     ` `n ``=` `42` `l ``=` `2` `r ``=` `5` `print``(unsetBitsInGivenRange(n, l, r)) ` ` `  `# This code is contributed by Sam007. `

C#

 `// C#  implementation to unset ` `// bits in the given range  ` `using` `System; ` `  `  `class` `GFG { ` `      `  `    ``// Function to toggle bits in the given range  ` `    ``static` `int` `toggleBitsFromLToR(``int` `n, ``int` `l, ``int` `r)  ` `    ``{  ` `        ``// calculating a number 'num' ` `        ``// having 'r' number of bits  ` `        ``// and bits in the range l  ` `        ``// to r are the only set bits  ` `        ``int` `num = ((1 << r) - 1) ^ ((1 << (l - 1)) - 1);  ` `  `  `        ``// toggle the bits in the ` `        ``// range l to r in 'n'  ` `        ``// and return the number  ` `        ``return` `(n ^ num);  ` `    ``}  ` `      `  `    ``// Function to unset bits in the given range  ` `    ``static` `int` `unsetBitsInGivenRange(``int` `n, ``int` `l, ``int` `r)  ` `    ``{  ` `        ``// 'num' is the highest  ` `        ``// positive integer number  ` `        ``// all the bits of 'num' ` `        ``// are set  ` `        ``int` `num = (1 << (2 * 8 - 1)) - 1;  ` `  `  `        ``// toggle the bits in ` `        ``// the range l to r in 'num'  ` `        ``num = toggleBitsFromLToR(num, l, r);  ` `  `  `        ``// unset the bits in  ` `        ``// the range l to r in 'n'  ` `        ``// and return the number  ` `        ``return` `(n & num);  ` `    ``}  ` `      `  `// Driver Code ` `static` `public` `void` `Main() { ` `     `  `    ``int` `n = 42;  ` `    ``int` `l = 2, r = 5;  ` `    ``Console.WriteLine(unsetBitsInGivenRange(n, l, r));  ` `}  ` `}  ` `  `  `// This Code is  Contributed by akt_mit  `

PHP

 ` `

Output:

```32
```

This article is contributed by Ayush Jauhari. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

My Personal Notes arrow_drop_up

Improved By : Sam007, jit_t

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.