Open in App
Not now

# 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.



## Javascript



Output:

4

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

My Personal Notes arrow_drop_up
Related Articles