# Python | 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)= (1_{10}01010)_{2}There are '2' set bits in the range2to5. Input : n = 79, l = 1, r = 4 Output : 4

We have existing solution for this problem please refer Count set bits in a range link. We can solve this problem quickly in Python. Approach is very simple,

- Convert decimal into binary using bin(num) function.
- Now remove first two characters of output binary string because bin function appends ‘0b’ as prefix in output string by default.
- Slice string starting from index
**(l-1)**to index**r**and reverse it, then count set bits in between.

`# Function to count set bits in a range ` ` ` `def` `countSetBits(n,l,r): ` ` ` ` ` `# convert n into it's binary ` ` ` `binary ` `=` `bin` `(n) ` ` ` ` ` `# remove first two characters ` ` ` `binary ` `=` `binary[` `2` `:] ` ` ` ` ` `# reverse string ` ` ` `binary ` `=` `binary[` `-` `1` `::` `-` `1` `] ` ` ` ` ` `# count all set bit '1' starting from index l-1 ` ` ` `# to r, where r is exclusive ` ` ` `print` `(` `len` `([binary[i] ` `for` `i ` `in` `range` `(l` `-` `1` `,r) ` `if` `binary[i]` `=` `=` `'1'` `])) ` ` ` `# Driver program ` `if` `__name__ ` `=` `=` `"__main__"` `: ` ` ` `n` `=` `42` ` ` `l` `=` `2` ` ` `r` `=` `5` ` ` `countSetBits(n,l,r) ` |

*chevron_right*

*filter_none*

Output:

2

## Recommended Posts:

- Python | Count unset bits in a range
- Count set bits in a range
- Range query for count of set bits
- Count unset bits in a range
- Count number of set bits in a range using bitset
- Python Bin | Count total bits in a number
- Count set bits using Python List comprehension
- Python map function | Count total set bits in all numbers from 1 to n
- Check if bits of a number has count of consecutive set bits in increasing order
- Set all the bits in given range of a number
- Copy set bits in a range
- Toggle bits in the given range
- Unset bits in the given range
- Check whether all the bits are set in the given range
- Set bits in N equals to M in the given range.

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.