# Count unset bits in a range

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

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

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

 ``

## Javascript

 ``

Output:

`4`

Time Complexity: O(log n)
Space Complexity: O(1)

My Personal Notes arrow_drop_up