# Count set bits in a range

• Difficulty Level : Medium
• Last Updated : 21 Jun, 2022

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

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

 ``

## Javascript

 ``

Output:

`2`

Time Complexity: O(logn)

Auxiliary Space: O(1)

This article is contributed by Ayush Jauhari. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.