Unset bits in the given range
Last Updated :
31 May, 2022
Improve
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:
- Calculate num = (1 << (sizeof(int) * 8 - 1)) - 1. This will produce the highest positive integer num. All the bits in num will be set.
- Toggle bits in the range l to r in num. Refer this post.
- Now, perform n = n & num. This will unset the bits in the range l to r in n.
- 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++ 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 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
# 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# 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 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
?>
<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)