3

我正在尝试找出算法,但我从谷歌得到的只是通过强制转换来完成。我需要知道细节。

所以如果我们有一个 float x 并且想要返回它的二进制表示,我们需要做什么?

我知道如果浮点数为 NaN 或无穷大,我们需要返回浮点数,否则步骤是什么?

编辑

该函数接受一个无符号整数,就像它是一个浮点数一样使用,然后返回该数字表示的整数。我不能使用强制转换,只能使用条件和按位运算符。

4

3 回答 3

3

或者,使用联合:

typedef union 
{
    float f_;
    int   i_;
} FloatBits;

FloatBits fb;

fb.f_ = 1.5;

然后fb.i_包含映射到的浮点数int以允许提取位。同样,关于类型大小的常见假设 - 您可以使用sizeof.

使用这种方法,您可以fb.i_直接设置位并查看它们映射回float.

于 2011-09-13T04:16:29.153 回答
1

编程语言中的float数字遵循IEEE 浮点算术标准 (IEEE 754)c

您可以使用代码转换floatint

int i = *(int *)&f; // f is the float variable you want to convert

然后int根据 IEEE 754 标准解释自己。

于 2011-09-13T04:04:40.030 回答
1

要测试 32 位值是否表示 NaN(如果它是浮点数),您可以检查其无符号值是否大于无穷大的表示。

int n = 
if((n & 0x7FFFFFFF) > 0x7f800000) // is NaN

需要删除符号,因为 NaN 可以将负号位设置为 1(尽管 NaN 不是正数或负数)


如果您想知道浮点数是否为 NAN,可以使用

float f = NAN
if (f != f) // is NAN

与无限比较

float f = INFINITY;
if (f == INFINITY)
于 2011-09-13T07:43:02.950 回答