Related Articles
Count unset bits in a range
• Difficulty Level : Medium
• Last Updated : 18 Apr, 2018

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

Examples:

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

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

## Recommended: Please solve it on PRACTICE 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. Let it be count.
3. Calculate ans = (r – l + 1) – count.
4. Return ans.

## C++

 `// C++ implementation to count unset 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 unset bits ` `// in the given range ` `unsigned ``int` `countUnsetBitsInGivenRange(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 unset bits in the range ` `    ``// 'l' to 'r' in 'n' ` `    ``return` `(r - l + 1) - countSetBits(n & num); ` `} ` ` `  `// Driver program to test above ` `int` `main() ` `{ ` `    ``unsigned ``int` `n = 80; ` `    ``unsigned ``int` `l = 1, r = 4; ` `    ``cout << countUnsetBitsInGivenRange(n, l, r); ` `    ``return` `0; ` `} `

## Java

 `// Java implementation to count unset 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 unset bits ` `    ``// in the given range ` `    ``static` `int` `countUnsetBitsInGivenRange(``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 unset bits in the range ` `        ``// 'l' to 'r' in 'n' ` `        ``return` `(r - l + ``1``) - countSetBits(n & num); ` `    ``} ` `     `  `    ``// Driver code ` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `        ``int` `n = ``80``; ` `        ``int` `l = ``1``, r = ``4``; ` `         `  `        ``System.out.print( ` `            ``countUnsetBitsInGivenRange(n, l, r)); ` `    ``} ` `} ` ` `  `// This code is contributed by Anant Agarwal. `

## Python3

 `# Python3 implementation to count  ` `# unset 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 ``+``=` `1` `    ``return` `count ` ` `  `# function to count unset bits ` `# in the given range ` `def` `countUnsetBitsInGivenRange (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 unset bits  ` `    ``# in the range 'l' to 'r' in 'n' ` `    ``return` `(r ``-` `l ``+` `1``) ``-` `countSetBits(n & num) ` ` `  `# Driver code to test above ` `n ``=` `80` `l ``=` `1` `r ``=` `4` `print``(countUnsetBitsInGivenRange(n, l, r)) ` ` `  `# This code is contributed by "Sharad_Bhardwaj" `

## C#

 `// C# implementation to count unset 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 unset bits ` `    ``// in the given range ` `    ``static` `int` `countUnsetBitsInGivenRange(``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 unset bits in the range ` `        ``// 'l' to 'r' in 'n' ` `        ``return` `(r - l + 1) - countSetBits(n & num); ` `    ``} ` `     `  `    ``//Driver code ` `    ``public` `static` `void` `Main() ` `    ``{ ` `        ``int` `n = 80; ` `        ``int` `l = 1, r = 4; ` `         `  `        ``Console.Write(countUnsetBitsInGivenRange(n, l, r)); ` `    ``} ` `} ` ` `  `//This code is contributed by Anant Agarwal. `

## PHP

 ` `

Output:

```4
```

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up
Recommended Articles
Page :