How to count set bits in a floating point number in C? (original) (raw)

Last Updated : 21 Jun, 2022

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)

Similar Reads