Set bits in N equals to M in the given range.
Last Updated :
10 Apr, 2025
You are given two 32-bit numbers, N and M, and two bit positions, i and j. Write a method to set all bits between i and j in N equal to M (e.g., M becomes a substring of N located at i and starting at j).
Examples :
Input : N = 1, M = 2, i = 2, j = 4
Output: 9
N = 00000001(Considering 8 bits only)
M = 10 (Binary of 2) For more indexes,
leading zeroes will be considered.
Now set 3 bits from ith index to j in
the N as in the M.
Bits:- 0 0 0 (0 1 0) 0 1 = 9
Indexes:- 7 6 5 4 3 2 1 0
From index 2 to 4, bits are set according
to the M.
Asked in : Adobe
A simple solution is to traverse all bits in N from 0 to 31 and set the bits equals to M in the range from i to j.
An efficient solution is to do following steps.
- Set all the bits after j in a number.
- Set all the bits before i in a number.
- Then perform Bitwise Or on both then we get the number with all the bits set except from i to j.
- Perform Bitwise And with the given N as to set the bits according to the N.
- Then shift M into the correct position i.e. in the range of i to j.
- And at the last perform Bitwise Or on (Shifted M and the N modified in 4th step).
- The result will be N with M as substring from ith to jth bits
C++
// C++ program for above implementation
#include <iostream>
using namespace std;
// Function to set the bits
int setBits(int n, int m, int i, int j)
{
// number with all 1's
int allOnes = ~0;
// Set all the bits in the left of j
int left = allOnes << (j + 1);
// Set all the bits in the right of j
int right = ((1 << i) - 1);
// Do Bitwise OR to get all the bits
// set except in the range from i to j
int mask = left | right;
// clear bits j through i
int masked_n = n & mask;
// move m into the correct position
int m_shifted = m << i;
// return the Bitwise OR of masked_n
// and shifted_m
return (masked_n | m_shifted);
}
// Drivers program
int main()
{
int n = 2, m = 4;
int i = 2, j = 4;
cout << setBits(n, m, i, j);
return 0;
}
Java
// Java Program
public class GFG
{
// Function to set the bits
static int setBits(int n, int m, int i, int j)
{
// number with all 1's
int allOnes = ~0;
// Set all the bits in the left of j
int left = allOnes << (j + 1);
// Set all the bits in the right of j
int right = ((1 << i) - 1);
// Do Bitwise OR to get all the bits
// set except in the range from i to j
int mask = left | right;
// clear bits j through i
int masked_n = n & mask;
// move m into the correct position
int m_shifted = m << i;
// return the Bitwise OR of masked_n
// and shifted_m
return (masked_n | m_shifted);
}
// Driver Program to test above function
public static void main(String[] args)
{
int n = 2, m = 4;
int i = 2, j = 4;
System.out.println(setBits(n, m, i, j));
}
}
// This code is contributed by Sumit Ghosh
Python
# Python program for above implementation
# Function to set the bits
def setBits(n, m, i, j):
# number with all 1's
allOnes = not 0
# Set all the bits in the left of j
left = allOnes << (j + 1)
# Set all the bits in the right of j
right = ((1 << i) - 1)
# Do Bitwise OR to get all the bits
# set except in the range from i to j
mask = left | right
# clear bits j through i
masked_n = n & mask
# move m into the correct position
m_shifted = m << i
# return the Bitwise OR of masked_n
# and shifted_m
return (masked_n | m_shifted)
# Drivers program
n, m = 2, 4
i, j = 2, 4
print(setBits(n, m, i, j))
# This code is submitted by Sachin Bisht
C#
// C# Program for above implementation
using System;
public class GFG {
// Function to set the bits
static int setBits(int n, int m, int i, int j)
{
// number with all 1's
int allOnes = ~0;
// Set all the bits in the left of j
int left = allOnes << (j + 1);
// Set all the bits in the right of j
int right = ((1 << i) - 1);
// Do Bitwise OR to get all the bits
// set except in the range from i to j
int mask = left | right;
// clear bits j through i
int masked_n = n & mask;
// move m into the correct position
int m_shifted = m << i;
// return the Bitwise OR of masked_n
// and shifted_m
return (masked_n | m_shifted);
}
// Driver Program to test above function
public static void Main()
{
int n = 2, m = 4;
int i = 2, j = 4;
Console.WriteLine(setBits(n, m, i, j));
}
}
// This code is contributed by Anant Agarwal.
JavaScript
<script>
// Javascript Program for above implementation
// Function to set the bits
function setBits(n, m, i, j)
{
// number with all 1's
let allOnes = ~0;
// Set all the bits in the left of j
let left = allOnes << (j + 1);
// Set all the bits in the right of j
let right = ((1 << i) - 1);
// Do Bitwise OR to get all the bits
// set except in the range from i to j
let mask = left | right;
// clear bits j through i
let masked_n = n & mask;
// move m into the correct position
let m_shifted = m << i;
// return the Bitwise OR of masked_n
// and shifted_m
return (masked_n | m_shifted);
}
let n = 2, m = 4;
let i = 2, j = 4;
document.write(setBits(n, m, i, j));
</script>
PHP
<?php
// PHP program for above implementation
// Function to set the bits
function setBits($n, $m, $i, $j)
{
// number with all 1's
$allOnes = ~0;
// Set all the bits
// in the left of j
$left = $allOnes << ($j + 1);
// Set all the bits
// in the right of j
$right = ((1 << $i) - 1);
// Do Bitwise OR to get all
// the bits set except in
// the range from i to j
$mask = $left | $right;
// clear bits j through i
$masked_n = $n & $mask;
// move m into the
// correct position
$m_shifted = $m << $i;
// return the Bitwise OR
// of masked_n and shifted_m
return ($masked_n | $m_shifted);
}
// Driver Code
$n = 2; $m = 4;
$i = 2; $j = 4;
echo setBits($n, $m, $i, $j);
// This code is contributed by ajit
?>
Output :
18
Time Complexity: O(1)
Auxiliary Space: O(1)
Similar Reads
Set all the bits in given range of a number 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.Ex
5 min read
Find the missing elements from 1 to M in given N ranges | Set-2 Given an integer m and n ranges (e.g. [a, b]) which are intersecting and overlapping. The task is to find all the number within the range that doesnât belong to any of the given ranges. Examples: Input: m = 6, ranges = {{1, 2}, {4, 5}} Output: 3 6 As only 3 and 6 are missing from the given ranges. I
14 min read
Find the missing elements from 1 to M in given N ranges | Set-2 Given an integer m and n ranges (e.g. [a, b]) which are intersecting and overlapping. The task is to find all the number within the range that doesnât belong to any of the given ranges. Examples: Input: m = 6, ranges = {{1, 2}, {4, 5}} Output: 3 6 As only 3 and 6 are missing from the given ranges. I
14 min read
Find the missing elements from 1 to M in given N ranges Given N segments as ranges [L, R] where ranges are non-intersecting and non-overlapping. The task is to find all number between 1 to M that doesn't belong to any of the given ranges. Examples: Input : N = 2, M = 6 Ranges: [1, 2] [4, 5] Output : 3, 6 Explanation: Only 3 and 6 are missing from the abo
8 min read
Check whether all the bits are set in the given range Given a non-negative number n and two values l and r. The problem is to check whether all the bits are set or not in the range l to r in the binary representation of n. Constraint: 1 <= l <= r <= number of bits in the binary representation of n.Examples: Input : n = 22, l = 2, r = 3 Output
7 min read
Number of elements with even factors in the given range Given a range [n, m], the task is to find the number of elements that have even number of factors in the given range (n and m inclusive).Examples : Input: n = 5, m = 20 Output: 14 The numbers with even factors are 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20. Input: n = 5, m = 100 Output: 88 A
3 min read