Copy set bits in a range

16 Jun, 2022
Given two numbers x and y, and a range [l, r] where 1 <= l, r <= 32. The task is consider set bits of y in range [l, r] and set these bits in x also.Examples : 
Input  : x = 10, y = 13, l = 2, r = 3
Output : x = 14
Binary representation of 10 is 1010 and 
that of y is 1101. There is one set bit
in y at 3'rd position (in given range). 
After we copy this bit to x, x becomes 1110
which is binary representation of 14.

Input  : x = 8, y = 7, l = 1, r = 2
Output : x = 11
Source : D E Shaw Interview 
Method 1 (One by one copy bits) We can one by one find set bits of y by traversing given range. For every set bit, we OR it to existing bit of x, so that the becomes set in x, if it was not set. Below is C++ implementation. 
CPP
Java
Python3
C#
Javascript
// C++ program to rearrange array in alternating// C++ program to copy set bits in a given// range [l, r] from y to x.#include <bits/stdc++.h>using namespace std; // Copy set bits in range [l, r] from y to x.// Note that x is passed by reference and modified// by this function.void copySetBits(unsigned &x, unsigned y,                 unsigned l, unsigned r){   // l and r must be between 1 to 32   // (assuming ints are stored using   //  32 bits)   if (l < 1 || r > 32)      return ;    // Traverse in given range   for (int i=l; i<=r; i++)   {       // Find a mask (A number whose       // only set bit is at i'th position)       int mask = 1 << (i-1);        // If i'th bit is set in y, set i'th       // bit in x also.       if (y & mask)          x = x | mask;   }} // Driver codeint main(){   unsigned x = 10, y = 13, l = 1, r = 32;   copySetBits(x, y, l, r);   cout << "Modified x is " << x;   return 0;}
// Java program to rearrange array in alternating// Java program to copy set bits in a given// range [l, r] from y to x.import java.util.*; class GFG{ // Copy set bits in range [l, r] from y to x.// Note that x is passed by reference and modified// by this function.static int copySetBits(int x, int y,                 int l, int r){   // l and r must be between 1 to 32   // (assuming ints are stored using   //  32 bits)   if (l < 1 || r > 32)      return x;    // Traverse in given range   for (int i = l; i <= r; i++)   {       // Find a mask (A number whose       // only set bit is at i'th position)       int mask = 1 << (i-1);        // If i'th bit is set in y, set i'th       // bit in x also.       if ((y & mask)!=0)          x = x | mask;   }       return x;} // Driver codepublic static void main(String[] args){   int x = 10, y = 13, l = 1, r = 32;  x = copySetBits(x, y, l, r);   System.out.print("Modified x is " +  x);}} // This code is contributed by umadevi9616
# Python program to rearrange array in alternating# Python program to copy set bits in a given# range [l, r] from y to x. # Copy set bits in range [l, r] from y to x.# Note that x is passed by reference and modified# by this function.def copySetBits(x, y, l, r):       # l and r must be between 1 to 32    # (assuming ints are stored using    # 32 bits)    if (l < 1 or r > 32):        return x;     # Traverse in given range    for i in range(l, r + 1):               # Find a mask (A number whose        # only set bit is at i'th position)        mask = 1 << (i - 1);         # If i'th bit is set in y, set i'th        # bit in x also.        if ((y & mask) != 0):            x = x | mask;    return x; # Driver codeif __name__ == '__main__':    x = 10;    y = 13;    l = 1;    r = 32;    x = copySetBits(x, y, l, r);    print("Modified x is ", x); # This code is contributed by gauravrajput1
// C# program to rearrange array in alternating// C# program to copy set bits in a given// range [l, r] from y to x.using System; public class GFG {     // Copy set bits in range [l, r] from y to x.    // Note that x is passed by reference and modified    // by this function.    static int copySetBits(int x, int y, int l, int r)    {               // l and r must be between 1 to 32        // (assuming ints are stored using        // 32 bits)        if (l < 1 || r > 32)            return x;         // Traverse in given range        for (int i = l; i <= r; i++)        {                       // Find a mask (A number whose            // only set bit is at i'th position)            int mask = 1 << (i - 1);             // If i'th bit is set in y, set i'th            // bit in x also.            if ((y & mask) != 0)                x = x | mask;        }         return x;    }     // Driver code    public static void Main(String[] args) {        int x = 10, y = 13, l = 1, r = 32;        x = copySetBits(x, y, l, r);        Console.Write("Modified x is " + x);    }} // This code is contributed by umadevi9616
<script>// javascript program to rearrange array in alternating// javascript program to copy set bits in a given// range [l, r] from y to x.     // Copy set bits in range [l, r] from y to x.    // Note that x is passed by reference and modified    // by this function.    function copySetBits(x , y , l , r)    {             // l and r must be between 1 to 32        // (assuming ints are stored using        // 32 bits)        if (l < 1 || r > 32)            return x;         // Traverse in given range        for (i = l; i <= r; i++)        {                     // Find a mask (A number whose            // only set bit is at i'th position)            var mask = 1 << (i - 1);             // If i'th bit is set in y, set i'th            // bit in x also.            if ((y & mask) != 0)                x = x | mask;        }         return x;    }     // Driver code        var x = 10, y = 13, l = 1, r = 32;        x = copySetBits(x, y, l, r);        document.write("Modified x is " + x); // This code is contributed by gauravrajput1</script>
Modified x is 15
Time Complexity: O(r)
Auxiliary Space: O(1)
 Method 2 (Copy all bits using one bit mask) 
CPP
Java
Python3
C#
Javascript
// C++ program to copy set bits in a given// range [l, r] from y to x.#include <bits/stdc++.h>using namespace std; // Copy set bits in range [l, r] from y to x.// Note that x is passed by reference and modified// by this function.void copySetBits(unsigned &x, unsigned y,                 unsigned l, unsigned r){    // l and r must be between 1 to 32    if (l < 1 || r > 32)        return ;     // get the length of the mask    int maskLength = (1ll<<(r-l+1)) - 1;     // Shift the mask to the required position    // "&" with y to get the set bits at between    // l ad r in y    int mask = ((maskLength)<<(l-1)) & y ;    x = x | mask;} // Driver codeint main(){   unsigned x = 10, y = 13, l = 2, r = 3;   copySetBits(x, y, l, r);   cout << "Modified x is " << x;   return 0;}
// Java program to copy set bits in a given// range [l, r] from y to x.import java.util.*; class GFG{ // Copy set bits in range [l, r] from y to x.// Note that x is passed by reference and modified// by this function.static int copySetBits(int x, int y,                 int l, int r){       // l and r must be between 1 to 32    if (l < 1 || r > 32)        return x;     // get the length of the mask    int maskLength = (int)((1L<<(r-l+1)) - 1);     // Shift the mask to the required position    // "&" with y to get the set bits at between    // l ad r in y    int mask = ((maskLength)<<(l-1)) & y ;    x = x | mask;    return x;} // Driver codepublic static void main(String[] args){   int x = 10, y = 13, l = 2, r = 3;  x =  copySetBits(x, y, l, r);   System.out.print("Modified x is " +  x);}} // This code is contributed by umadevi9616
# Python program to copy set bits in a given# range [l, r] from y to x. # Copy set bits in range [l, r] from y to x.# Note that x is passed by reference and modified# by this function.def copySetBits(x, y, l, r):     # l and r must be between 1 to 32    if (l < 1 or r > 32):        return x;     # get the length of the mask    maskLength = (int) ((1 << (r - l + 1)) - 1);     # Shift the mask to the required position    # "&" with y to get the set bits at between    # l ad r in y    mask = ((maskLength) << (l - 1)) & y;    x = x | mask;    return x; # Driver codeif __name__ == '__main__':    x = 10;    y = 13;    l = 2;    r = 3;    x = copySetBits(x, y, l, r);    print("Modified x is " , x); # This code is contributed by gauravrajput1
// C# program to copy set bits in a given// range [l, r] from y to x.using System; public class GFG{     // Copy set bits in range [l, r] from y to x.    // Note that x is passed by reference and modified    // by this function.    static int copySetBits(int x, int y, int l, int r) {         // l and r must be between 1 to 32        if (l < 1 || r > 32)            return x;         // get the length of the mask        int maskLength = (int) ((1L << (r - l + 1)) - 1);         // Shift the mask to the required position        // "&" with y to get the set bits at between        // l ad r in y        int mask = ((maskLength) << (l - 1)) & y;        x = x | mask;        return x;    }     // Driver code    public static void Main(String[] args) {        int x = 10, y = 13, l = 2, r = 3;        x = copySetBits(x, y, l, r);        Console.Write("Modified x is " + x);    }} // This code is contributed by gauravrajput1
<script>// javascript program to copy set bits in a given// range [l, r] from y to x.     // Copy set bits in range [l, r] from y to x.    // Note that x is passed by reference and modified    // by this function.    function copySetBits(x , y , l , r) {         // l and r must be between 1 to 32        if (l < 1 || r > 32)            return x;         // get the length of the mask        var maskLength = parseInt( ((1 << (r - l + 1)) - 1));         // Shift the mask to the required position        // "&" with y to get the set bits at between        // l ad r in y        var mask = ((maskLength) << (l - 1)) & y;        x = x | mask;        return x;    }     // Driver code        var x = 10, y = 13, l = 2, r = 3;        x = copySetBits(x, y, l, r);        document.write("Modified x is " + x);     // This code is contributed by gauravrajput1</script>
Modified x is 14
Time Complexity: O(1)
Auxiliary Space: O(1)
Thanks to Ashish Rathi for suggesting this solution in a comment.This article is contributed by Rishi. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above 
chandrimaroychowdhury1999
anikaseth98
aniketkumar20
adityajain19
subham348
umadevi9616
GauravRajput1
sankt
Adobe
D-E-Shaw
Bit Magic
D-E-Shaw
Adobe
Bit Magic
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.