¿Cómo contar bits establecidos en un número de punto flotante en C?

Dado un número de punto flotante , escriba una función para contar bits establecidos en su representación binaria. 
Por ejemplo, la representación de punto flotante de 0.15625 tiene 6 bits establecidos (Ver esto ). Un compilador típico de C utiliza un formato de punto flotante de precisión simple
Podemos usar la idea discutida aquí . La idea es tomar la dirección del número de punto flotante dado en una variable de puntero, convertir el puntero en tipo char * y procesar los bytes individuales uno por uno. Podemos contar fácilmente los bits establecidos en un char usando las técnicas discutidas aquí
A continuación se muestra la implementación en C de la idea anterior.
 

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;
}

Producción: 

Binary representation of 0.156250 has 6 set bits

Complejidad de tiempo: O (nlogn)

Espacio Auxiliar: O(1)

Este artículo es una contribución de Vineet Gupta . Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *