Number with set bits only between L-th and R-th index

Given L and R. The task is to find the number in whose binary representation all bits between the L-th and R-th index are set and the rest of the bits are unset. The binary representation is of 32 bits.

Examples:

Input: L = 2, R = 5
Output: 60
Explanation: The binary representation is
0..0111100 => 60

Input: L = 1, R = 3
Output: 14
Explanation: The binary representation is
0..01110 => 14

Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Naive Approach: The naive approach to find the number is to iterate from i = L to i = R and calculate the addition of all the powers of 2i.

Below program illustrate the naive approach:

C++

 `// CPP program to print the integer ` `// with all the bits set in range L-R ` `// Naive Approach ` `#include ` `using` `namespace` `std; ` ` `  `// Function to return the integer ` `// with all the bits set in range L-R ` `int` `getInteger(``int` `L, ``int` `R) ` `{ ` ` `  `    ``int` `number = 0; ` ` `  `    ``// iterate from L to R ` `    ``// and add all powers of 2 ` `    ``for` `(``int` `i = L; i <= R; i++) ` `        ``number += ``pow``(2, i); ` ` `  `    ``return` `number; ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``int` `L = 2, R = 5; ` `    ``cout << getInteger(L, R); ` `    ``return` `0; ` `} `

Java

 `// Java program to print the  ` `// integer with all the bits  ` `// set in range L-R Naive Approach ` `import` `java.io.*; ` ` `  `class` `GFG  ` `{ ` ` `  `// Function to return the  ` `// integer with all the  ` `// bits set in range L-R ` `static` `int` `getInteger(``int` `L,  ` `                      ``int` `R) ` `{ ` `    ``int` `number = ``0``; ` ` `  `    ``// iterate from L to R ` `    ``// and add all powers of 2 ` `    ``for` `(``int` `i = L; i <= R; i++) ` `        ``number += Math.pow(``2``, i); ` ` `  `    ``return` `number; ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main (String[] args)  ` `{ ` `    ``int` `L = ``2``, R = ``5``; ` `    ``System.out.println(getInteger(L, R)); ` `} ` `} ` ` `  `// This code is contributed by anuj_67.. `

Python3

 `# Python 3 program to print the integer ` `# with all the bits set in range L-R ` `# Naive Approach ` `from` `math ``import` `pow` ` `  `# Function to return the integer ` `# with all the bits set in range L-R ` `def` `getInteger(L, R): ` `    ``number ``=` `0` ` `  `    ``# iterate from L to R ` `    ``# and add all powers of 2 ` `    ``for` `i ``in` `range``(L, R ``+` `1``, ``1``): ` `        ``number ``+``=` `pow``(``2``, i) ` ` `  `    ``return` `number ` ` `  `# Driver Code ` `if` `__name__ ``=``=` `'__main__'``: ` `    ``L ``=` `2` `    ``R ``=` `5` `    ``print``(``int``(getInteger(L, R))) ` ` `  `# This code is contributed by ` `# Surendra_Gangwar `

C#

 `// C# program to print the  ` `// integer with all the bits  ` `// set in range L-R Naive Approach ` `using` `System; ` ` `  `class` `GFG ` `{ ` `// Function to return the  ` `// integer with all the  ` `// bits set in range L-R ` `static` `int` `getInteger(``int` `L,  ` `                      ``int` `R) ` `{ ` `    ``int` `number = 0; ` ` `  `    ``// iterate from L to R ` `    ``// and add all powers of 2 ` `    ``for` `(``int` `i = L; i <= R; i++) ` `        ``number += (``int``)Math.Pow(2, i); ` ` `  `    ``return` `number; ` `} ` ` `  `// Driver Code ` `public` `static` `void` `Main ()  ` `{ ` `    ``int` `L = 2, R = 5; ` `    ``Console.Write(getInteger(L, R)); ` `} ` `} ` ` `  `// This code is contributed ` `// by shiv_bhakt. `

PHP

 ` `

Output:

`60`

An efficient approach is to compute the number with all (R) set bits from right and subtract the number with all (L-1) bits set from right to get the required number.

1. Compute the number which has all R set bits from the right using the below formula.
`(1 << (R+1)) - 1.`
2. Subtract the number which has all (L-1) set bits from the right.
`(1<<L) - 1 `

Hence computing ((1<<(R+1))-1)-((1<<L)-1), we get the final formula as:

(1<<(R+1))-(1<<L)

Below program illustrate the efficient approach:

C++

 `// CPP program to print the integer ` `// with all the bits set in range L-R ` `// Efficient Approach ` `#include ` `using` `namespace` `std; ` ` `  `// Function to return the integer ` `// with all the bits set in range L-R ` `int` `setbitsfromLtoR(``int` `L, ``int` `R) ` `{ ` `    ``return` `(1 << (R + 1)) - (1 << L); ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``int` `L = 2, R = 5; ` `    ``cout << setbitsfromLtoR(L, R); ` `    ``return` `0; ` `} `

Java

 `// Java program to print  ` `// the integer with all  ` `// the bits set in range ` `// L-R Efficient Approach ` `import` `java.io.*; ` ` `  `class` `GFG  ` `{ ` `     `  `// Function to return the  ` `// integer with all the  ` `// bits set in range L-R ` `static` `int` `setbitsfromLtoR(``int` `L,  ` `                           ``int` `R) ` `{ ` `    ``return` `(``1` `<< (R + ``1``)) -  ` `           ``(``1` `<< L); ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main (String[] args) ` `{ ` `    ``int` `L = ``2``, R = ``5``; ` `    ``System.out.println(setbitsfromLtoR(L, R)); ` `} ` `} ` ` `  `// This code is contributed ` `// by shiv_bhakt. `

Python3

 `# Python3 program to print  ` `# the integer with all the  ` `# bits set in range L-R ` `# Efficient Approach ` ` `  `# Function to return the ` `# integer with all the ` `# bits set in range L-R ` `def` `setbitsfromLtoR(L, R): ` ` `  `    ``return` `((``1` `<< (R ``+` `1``)) ``-`  `            ``(``1` `<< L)) ` ` `  `# Driver Code ` `L ``=` `2` `R ``=` `5` `print``(setbitsfromLtoR(L, R)) ` ` `  `# This code is contributed ` `# by Smita `

C#

 `// C# program to print  ` `// the integer with all  ` `// the bits set in range ` `// L-R Efficient Approach ` `using` `System; ` ` `  `class` `GFG ` `{ ` `// Function to return the  ` `// integer with all the  ` `// bits set in range L-R ` `static` `int` `setbitsfromLtoR(``int` `L,  ` `                           ``int` `R) ` `{ ` `    ``return` `(1 << (R + 1)) -  ` `           ``(1 << L); ` `} ` ` `  `// Driver Code ` `public` `static` `void` `Main () ` `{ ` `    ``int` `L = 2, R = 5; ` `    ``Console.WriteLine(setbitsfromLtoR(L, R)); ` `} ` `} ` ` `  `// This code is contributed ` `// by shiv_bhakt. `

PHP

 ` `

Output:

`60`

Time Complexity: O(1)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.