Рубрики

Как посчитать набор бит в числе с плавающей запятой в C?

Учитывая число с плавающей запятой , напишите функцию для подсчета установленных бит в ее двоичном представлении.

Например, представление с плавающей запятой 0.15625 имеет 6 установленных бит (см. Это ). Типичный компилятор C использует формат с плавающей запятой одинарной точности .

Мы можем использовать идею, обсуждаемую здесь . Идея состоит в том, чтобы взять адрес заданного числа с плавающей запятой в переменной указателя, ввести указатель на тип char * и обработать отдельные байты один за другим. Мы можем легко посчитать установленные биты в символе, используя методы, обсужденные здесь .

Ниже приводится реализация вышеуказанной идеи.

#include <stdio.h>

  
// Вспомогательная функция для подсчета установленных битов в символе.
// Подробнее об этой функции см. Http://goo.gl/eHF6Y8 .

unsigned int countSetBitsChar(char n)

{

    unsigned int count = 0;

    while (n)

    {

      n &= (n-1);

      count++;

    }

    return count;

}

  
// Возвращает установленные биты в двоичном представлении x

unsigned int countSetBitsFloat(float x)

{

    // Подсчитать количество символов (или байтов) в двоичном представлении с плавающей точкой

    unsigned int n = sizeof(float)/sizeof(char);

  

    // вводим адрес x в указатель на символ

    char *ptr = (char *)&x;  

  

    int count = 0;   // Для сохранения результата

    for (int i = 0; i < n; i++)

    {

         count += countSetBitsChar(*ptr);

         ptr++;

    }

    return count;

}

  
// Программа драйвера для проверки вышеуказанной функции

int main()

{

    float x = 0.15625;

    printf ("Binary representation of %f has %u set bits ", x,

             countSetBitsFloat(x));

    return 0;

}

Выход:

Binary representation of 0.156250 has 6 set bits

Эта статья принадлежит Vineet Gupta . Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Как посчитать набор бит в числе с плавающей запятой в C?

0.00 (0%) 0 votes