Open In App

Unset bits in the given range

Improve
Improve
Like Article
Like
Save
Share
Report

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

 

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++ implementation to unset bits in the given range
#include<bits/stdc++.h>
using namespace std;
 
// Function to toggle bits in the given range
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
int unsetBitsInGivenRange(int n, int l, int r)
{
    // 'num' is the highest positive integer number
    // all the bits of 'num' are set
    long num = (1ll << (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
int main()
{
    int n = 42;
    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




<?php
// PHP implementation to unset
// bits in the given range
 
    // Function to toggle bits
    // in the given range
    function 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
    function 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;
        echo unsetBitsInGivenRange($n, $l, $r);
     
// This code is contributed by Sam007
?>


Javascript




<script>
    // Javascript implementation to unset bits in the given range
     
    // Function to toggle bits in the given range
    function 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
        let 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
    function unsetBitsInGivenRange(n, l, r)
    {
        // 'num' is the highest
        // positive integer number
        // all the bits of 'num'
        // are set
        let 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);
    }
     
    let n = 42;
    let l = 2, r = 5;
    document.write(unsetBitsInGivenRange(n, l, r));
     
</script>


Output: 
 

32

Time Complexity : O(1)

Auxiliary Space: O(1)

 



Last Updated : 31 May, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads