📜  如何计算C中浮点数中的设置位?

📅  最后修改于: 2021-05-25 21:48:00             🧑  作者: Mango

给定一个浮点数,编写一个函数以其二进制表示形式对设置位进行计数。

例如,浮点表示0.15625有6个设置位(请参见此)。典型的C编译器使用单精度浮点格式。

我们可以使用这里讨论的想法。这个想法是在指针变量中获取给定浮点数的地址,将指针转换为char *类型,然后逐个处理单个字节。使用此处讨论的技术,我们可以轻松地计算char中的设置位。

以下是上述想法的C实现。

#include 
  
// 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;
}

输出:

Binary representation of 0.156250 has 6 set bits
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”