Given a number n, count unset bits after MSB (Most Significant Bit).
Examples :
Input : 17 Output : 3 Binary of 17 is 10001 so unset bit is 3 Input : 7 Output : 0
A Simple Solution is to traverse through all bits and count unset bits.
C++
// C++ program to count unset bits in an integer #include <iostream> using namespace std;
int countunsetbits( int n)
{ int count = 0;
// x holds one set digit at a time
// starting from LSB to MSB of n.
for ( int x = 1; x <= n; x = x<<1)
if ((x & n) == 0)
count++;
return count;
} // Driver code int main()
{ int n = 17;
cout << countunsetbits(n);
return 0;
} |
Java
// JAVA Code to Count unset bits in a number class GFG {
public static int countunsetbits( int n)
{
int count = 0 ;
// x holds one set digit at a time
// starting from LSB to MSB of n.
for ( int x = 1 ; x <= n; x = x<< 1 )
if ((x & n) == 0 )
count++;
return count;
}
/* Driver program to test above function */
public static void main(String[] args)
{
int n = 17 ;
System.out.println(countunsetbits(n));
}
} // This code is contributed by Arnav Kr. Mandal. |
Python3
# Python 3 program to count unset # bits in an integer def countunsetbits(n):
count = 0
# x holds one set digit at a time
# starting from LSB to MSB of n.
x = 1
while (x < n + 1 ):
if ((x & n) = = 0 ):
count + = 1
x = x << 1
return count
# Driver code if __name__ = = '__main__' :
n = 17
print (countunsetbits(n))
# This code is contributed by # Shashank_Sharma |
C#
// C# Code to Count unset // bits in a number using System;
class GFG {
// Function to count unset bits
public static int countunsetbits( int n)
{
int count = 0;
// x holds one set digit at a time
// starting from LSB to MSB of n.
for ( int x = 1; x <= n; x = x << 1)
if ((x & n) == 0)
count++;
return count;
}
// Driver Code
public static void Main()
{
int n = 17;
Console.Write(countunsetbits(n));
}
} // This code is contributed by Nitin Mittal. |
PHP
<?php // PHp program to count // unset bits in an integer function countunsetbits( $n )
{ $count = 0;
// x holds one set digit
// at a time starting
// from LSB to MSB of n.
for ( $x = 1; $x <= $n ;
$x = $x << 1)
if (( $x & $n ) == 0)
$count ++;
return $count ;
} // Driver code $n = 17;
echo countunsetbits( $n );
// This code is contributed // by nitin mittal. ?> |
Javascript
<script> // Javascript program to count unset bits in an integer function countunsetbits(n)
{ var count = 0;
// x holds one set digit at a time
// starting from LSB to MSB of n.
for ( var x = 1; x <= n; x = x<<1)
if ((x & n) == 0)
count++;
return count;
} // Driver code var n = 17;
document.write(countunsetbits(n)); </script> |
Output :
3
Above solution complexity is log(n).
Space Complexity : O(1)
Efficient Solutions :
The idea is to toggle bits in O(1) time. Then apply any of the methods discussed in count set bits article.
In GCC, we can directly count set bits using __builtin_popcount(). First toggle the bits and then apply above function __builtin_popcount().
C++
// An optimized C++ program to count unset bits // in an integer. #include <iostream> using namespace std;
int countUnsetBits( int n)
{ int x = n;
// Make all bits set MSB
// (including MSB)
// This makes sure two bits
// (From MSB and including MSB)
// are set
n |= n >> 1;
// This makes sure 4 bits
// (From MSB and including MSB)
// are set
n |= n >> 2;
n |= n >> 4;
n |= n >> 8;
n |= n >> 16;
// Count set bits in toggled number
return __builtin_popcount(x ^ n);
} // Driver code int main()
{ int n = 17;
cout << countUnsetBits(n);
return 0;
} |
Java
// An optimized Java program to count unset bits // in an integer. class GFG
{ static int countUnsetBits( int n)
{ int x = n;
// Make all bits set MSB
// (including MSB)
// This makes sure two bits
// (From MSB and including MSB)
// are set
n |= n >> 1 ;
// This makes sure 4 bits
// (From MSB and including MSB)
// are set
n |= n >> 2 ;
n |= n >> 4 ;
n |= n >> 8 ;
n |= n >> 16 ;
// Count set bits in toggled number
return Integer.bitCount(x^ n);
} // Driver code public static void main(String[] args)
{ int n = 17 ;
System.out.println(countUnsetBits(n));
} } /* This code contributed by PrinciRaj1992 */ |
Python3
# An optimized Python program to count # unset bits in an integer. import math
def countUnsetBits(n):
x = n
# Make all bits set MSB(including MSB)
# This makes sure two bits(From MSB
# and including MSB) are set
n | = n >> 1
# This makes sure 4 bits(From MSB and
# including MSB) are set
n | = n >> 2
n | = n >> 4
n | = n >> 8
n | = n >> 16
t = math.log(x ^ n, 2 )
# Count set bits in toggled number
return math.floor(t)
# Driver code n = 17
print (countUnsetBits(n))
# This code is contributed 29AjayKumar |
C#
PHP
Javascript
Output :
3
Time Complexity: O(1)
Auxiliary Space: O(1)
Recommended Articles