# Copy set bits in a range

• Difficulty Level : Medium
• Last Updated : 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

Recommended Practice

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

 `// C++ program to rearrange array in alternating``// C++ program to copy set bits in a given``// range [l, r] from y to x.``#include ``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 code``int` `main()``{``   ``unsigned x = 10, y = 13, l = 1, r = 32;``   ``copySetBits(x, y, l, r);``   ``cout << ``"Modified x is "` `<< x;``   ``return` `0;``}`

## Java

 `// 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 code``public` `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`

## Python3

 `# 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 code``if` `__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#

 `// 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`

## Javascript

 ``

Output

`Modified x is 15`

Time Complexity: O(r)

Auxiliary Space: O(1)

Method 2 (Copy all bits using one bit mask)

## CPP

 `// C++ program to copy set bits in a given``// range [l, r] from y to x.``#include ``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 code``int` `main()``{``   ``unsigned x = 10, y = 13, l = 2, r = 3;``   ``copySetBits(x, y, l, r);``   ``cout << ``"Modified x is "` `<< x;``   ``return` `0;``}`

## Java

 `// 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 code``public` `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`

## Python3

 `# 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 code``if` `__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#

 `// 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`

## Javascript

 ``

Output

`Modified x is 14`

Time Complexity: O(1)

Auxiliary Space: O(1)

Thanks to Ashish Rathi for suggesting this solution in a comment.