Given a non-negative number n and two values l and r. The problem is to set 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 r-th bit.
Constraint: 1 <= l <= r <= number of bits in the binary representation of n.
Examples :
Input : n = 17, l = 2, r = 3 Output : 23 (17)10 = (10001)2 (23)10 = (10111)2 The bits in the range 2 to 3 in the binary representation of 17 are set. Input : n = 50, l = 2, r = 5 Output : 62
Approach: Following are the steps:
1. Find a number 'range' that has all set bits in given range. And all other bits of this number are 0. range = (((1 << (l - 1)) - 1) ^ ((1 << (r)) - 1)); 2. Now, perform "n = n | range". This will set the bits in the range from l to r in n.
C++
// C++ implementation to Set bits in // the given range #include <iostream> using namespace std;
// function to toggle bits in the given range int setallbitgivenrange( int n, int l, int r)
{ // calculating a number 'range' having set
// bits in the range from l to r and all other
// bits as 0 (or unset).
int range = (((1 << (l - 1)) - 1) ^
((1 << (r)) - 1));
return (n | range);
} // Driver code int main()
{ int n = 17, l = 2, r = 3;
cout << setallbitgivenrange(n, l, r);
return 0;
} |
Java
// java implementation to Set bits in // the given range import java.util.*;
class GFG
{ // function to toggle bits in the
// given range
static int setallbitgivenrange( int n,
int l, int r)
{
// calculating a number 'range'
// having set bits in the range
// from l to r and all other
// bits as 0 (or unset).
int range = ((( 1 << (l - 1 )) - 1 ) ^
(( 1 << (r)) - 1 ));
return (n | range);
}
// Driver code
public static void main(String[] args)
{
int n = 17 , l = 2 , r = 3 ;
System.out.println(setallbitgivenrange(
n, l, r));
}
} // This code is contributed by Sam007. |
Python3
# Python3 implementation to Set # bits in the given range # Function to toggle bits # in the given range def setallbitgivenrange(n, l, r):
# calculating a number 'range'
# having set bits in the range
# from l to r and all other
# bits as 0 (or unset).
range = ((( 1 << (l - 1 )) - 1 ) ^
(( 1 << (r)) - 1 ))
return (n | range )
# Driver code n, l, r = 17 , 2 , 3
print (setallbitgivenrange(n, l, r))
# This code is contributed by Anant Agarwal. |
C#
// C# implementation to Set // bits in the given range using System;
class GFG
{ // function to toggle bits
// in the given range
static int setallbitgivenrange( int n, int l, int r)
{
// calculating a number 'range'
// having set bits in the range
// from l to r and all other
// bits as 0 (or unset).
int range = (((1 << (l - 1)) - 1) ^
((1 << (r)) - 1));
return (n | range);
}
// Driver code
static void Main()
{
int n = 17, l = 2, r = 3;
Console.Write(setallbitgivenrange(n, l, r));
}
} // This code is contributed by Sam007 |
PHP
<?php // PHP implementation to Set // bits in the given range // function to toggle bits // in the given range function setallbitgivenrange( $n , $l , $r )
{ // calculating a number 'range'
// having set bits in the range
// from l to r and all other
// bits as 0 (or unset).
$range = (((1 << ( $l - 1)) - 1) ^
((1 << ( $r )) - 1));
return ( $n | $range );
} // Driver code $n = 17;
$l = 2;
$r = 3;
echo setallbitgivenrange( $n , $l , $r );
// This code is contributed by Sam007 ?> |
Javascript
<script> // Javascript implementation to Set bits in // the given range // function to toggle bits in the given range function setallbitgivenrange(n, l, r)
{ // calculating a number 'range' having set
// bits in the range from l to r and all other
// bits as 0 (or unset).
let range = (((1 << (l - 1)) - 1) ^
((1 << (r)) - 1));
return (n | range);
} // Driver code let n = 17, l = 2, r = 3;
document.write(setallbitgivenrange(n, l, r));
</script> |
Output :
23
Time Complexity : O(1)
Auxiliary Space : O(1)