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.

`#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` `); ` ` ` ` ` `// typcast 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

This article is contrbuted by **Vineet Gupta**. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above

## leave a comment

## 0 Comments