Open In App

How to count set bits in a floating point number in C?

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

Given a floating point number, write a function to count set bits in its binary representation. 
For example, floating point representation of 0.15625 has 6 set bits (See this). A typical C compiler uses single precision floating point format
We can use the idea discussed here. The idea is to take address of the given floating point number in a pointer variable, typecast the pointer to char * type and process individual bytes one by one. We can easily count set bits in a char using the techniques discussed here
Following is C implementation of the above idea.
 

C




#include <stdio.h>
 
// A utility function to count set bits in a char.
// Refer http://goo.gl/eHF6Y8 for details of this function.
unsigned int countSetBitsChar(char n)
{
    unsigned int count = 0;
    while (n)
    {
      n &= (n-1);
      count++;
    }
    return count;
}
 
// Returns set bits in binary representation of x
unsigned int countSetBitsFloat(float x)
{
    // Count number of chars (or bytes) in binary representation of float
    unsigned int n = sizeof(float)/sizeof(char);
 
    // typecast address of x to a char pointer
    char *ptr = (char *)&x; 
 
    int count = 0;   // To store the result
    for (int i = 0; i < n; i++)
    {
         count += countSetBitsChar(*ptr);
         ptr++;
    }
    return count;
}
 
// Driver program to test above function
int main()
{
    float x = 0.15625;
    printf ("Binary representation of %f has %u set bits ", x,
             countSetBitsFloat(x));
    return 0;
}


Output: 

Binary representation of 0.156250 has 6 set bits

Time Complexity: O(nlogn)

Auxiliary Space: O(1)

 



Last Updated : 21 Jun, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads