# Count set bits in a range

Given a non-negative number n and two values l and r. The problem is to count the number of set bits in the range l to r in the binary representation of n, i.e, to count set bits from the rightmost lth bit to the rightmost rth bit.

Constraint: 1 <= l <= r <= number of bits in the binary representation of n.

Examples:

```Input : n = 42, l = 2, r = 5
Output : 2
(42)10 = (101010)2
There are '2' set bits in the range 2 to 5.

Input : n = 79, l = 1, r = 4
Output : 4
```

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

Approach: Following are the steps:

1. Calculate num = ((1 << r) – 1) ^ ((1 << (l-1)) – 1). This will produce a number num having r number of bits and bits in the range l to r are the only set bits.
2. Count number of set bits in the number (n & num). Refer this post.

## C++

 `// C++ implementation to count set bits in the ` `// given range ` `#include ` ` `  `using` `namespace` `std; ` ` `  `// Function to get no of set bits in the ` `// binary representation of 'n' ` `unsigned ``int` `countSetBits(``int` `n) ` `{ ` `    ``unsigned ``int` `count = 0; ` `    ``while` `(n) { ` `        ``n &= (n - 1); ` `        ``count++; ` `    ``} ` `    ``return` `count; ` `} ` ` `  `// function to count set bits in the given range ` `unsigned ``int` `countSetBitsInGivenRange(unsigned ``int` `n, ` `                       ``unsigned ``int` `l, unsigned ``int` `r) ` `{ ` `    ``// calculating a number 'num' having 'r' number ` `    ``// of bits and bits in the range l to r are the  ` `    ``// only set bits ` `    ``int` `num = ((1 << r) - 1) ^ ((1 << (l - 1)) - 1); ` ` `  `    ``// returns number of set bits in the range ` `    ``// 'l' to 'r' in 'n' ` `    ``return` `countSetBits(n & num); ` `} ` ` `  `// Driver program to test above ` `int` `main() ` `{ ` `    ``unsigned ``int` `n = 42; ` `    ``unsigned ``int` `l = 2, r = 5; ` `    ``cout << countSetBitsInGivenRange(n, l, r); ` `    ``return` `0; ` `} `

## Java

 `// Java implementation to count set bits in the ` `// given range ` `class` `GFG { ` `     `  `    ``// Function to get no of set bits in the ` `    ``// binary representation of 'n' ` `    ``static` `int` `countSetBits(``int` `n) ` `    ``{ ` `        ``int` `count = ``0``; ` `        ``while` `(n > ``0``) { ` `            ``n &= (n - ``1``); ` `            ``count++; ` `        ``} ` `         `  `        ``return` `count; ` `    ``} ` ` `  `    ``// function to count set bits in the given range ` `    ``static` `int` `countSetBitsInGivenRange(``int` `n, ``int` `l, ``int` `r) ` `    ``{ ` `         `  `        ``// calculating a number 'num' having 'r' number ` `        ``// of bits and bits in the range l to r are the ` `        ``// only set bits ` `        ``int` `num = ((``1` `<< r) - ``1``) ^ ((``1` `<< (l - ``1``)) - ``1``); ` ` `  `        ``// returns number of set bits in the range ` `        ``// 'l' to 'r' in 'n' ` `        ``return` `countSetBits(n & num); ` `    ``} ` `     `  `    ``// Driver code ` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `        ``int` `n = ``42``; ` `        ``int` `l = ``2``, r = ``5``; ` `         `  `        ``System.out.print(countSetBitsInGivenRange(n, l, r)); ` `    ``} ` `} ` ` `  `// This code is contributed by Anant Agarwal. `

## Python3

 `# Python3 implementation to count ` `# set bits in the given range ` ` `  `# Function to get no of set bits in the ` `# binary representation of 'n' ` `def` `countSetBits(n): ` `    ``count ``=` `0` `    ``while` `(n): ` `        ``n &``=` `(n ``-` `1``) ` `        ``count ``=` `count ``+` `1` `     `  `    ``return` `count ` `  `  `# function to count set bits in ` `# the given range ` `def` `countSetBitsInGivenRange(n, l,  r): ` ` `  `    ``# calculating a number 'num' having ` `    ``# 'r' number of bits and bits in the ` `    ``# range l to r are the  only set bits ` `    ``num ``=` `((``1` `<< r) ``-` `1``) ^ ((``1` `<< (l ``-` `1``)) ``-` `1``) ` `  `  `    ``# returns number of set bits in the range ` `    ``# 'l' to 'r' in 'n' ` `    ``return` `countSetBits(n & num) ` ` `  `# Driver program to test above ` `n ``=` `42` `l ``=` `2` `r ``=` `5` `ans ``=` `countSetBitsInGivenRange(n, l, r) ` `print` `(ans) ` ` `  `# This code is contributed by Saloni Gupta. `

## C#

 `// C# implementation to count set bits in the ` `// given range ` `using` `System; ` ` `  `class` `GFG { ` `     `  `    ``// Function to get no of set bits in the ` `    ``// binary representation of 'n' ` `    ``static` `int` `countSetBits(``int` `n) ` `    ``{ ` `        ``int` `count = 0; ` `         `  `        ``while` `(n>0) { ` `            ``n &= (n - 1); ` `            ``count++; ` `        ``} ` `         `  `        ``return` `count; ` `    ``} ` `      `  `    ``// function to count set bits in the given range ` `    ``static` `int` `countSetBitsInGivenRange(``int` `n, ` `                                       ``int` `l, ``int` `r) ` `    ``{ ` `         `  `        ``// calculating a number 'num' having 'r' number ` `        ``// of bits and bits in the range l to r are the  ` `        ``// only set bits ` `        ``int` `num = ((1 << r) - 1) ^ ((1 << (l - 1)) - 1); ` `      `  `        ``// returns number of set bits in the range ` `        ``// 'l' to 'r' in 'n' ` `        ``return` `countSetBits(n & num); ` `    ``} ` `     `  `    ``//Driver code ` `    ``public` `static` `void` `Main() ` `    ``{ ` `        ``int` `n = 42; ` `        ``int` `l = 2, r = 5; ` `         `  `        ``Console.WriteLine(countSetBitsInGivenRange(n, l, r)); ` `    ``} ` `} ` ` `  `// This code is contributed by Anant Agarwal. `

## PHP

 ` `

Output:

```2
```

This article is contributed by Ayush Jauhari. 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.

My Personal Notes arrow_drop_up

Improved By : jit_t

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.