Open In App

Unset bits in the given range

Last Updated : 31 May, 2022
Comments
Improve
Suggest changes
Like Article
Like
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)


 


Next Article
Article Tags :
Practice Tags :

Similar Reads