按位浮点到Int

时间:2011-09-13 03:49:42

标签: c floating-point bit-manipulation floating-point-conversion

我正在试图找出这个算法,但我得到谷歌的所有东西都是用铸造做的。我需要知道细节。

因此,如果我们有一个浮点x并想要返回它的二进制表示,我们需要做什么?

我知道我们需要返回浮点数,如果它的NaN或无穷大,但其他步骤是什么?

修改

该函数接受一个unsigned int,就像它是一个float一样,然后返回数字所代表的整数。我不能使用转换,只是条件和按位运算符。

3 个答案:

答案 0 :(得分:3)

或者,使用union:

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

FloatBits fb;

fb.f_ = 1.5;

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

使用这种方法,您可以直接设置fb.i_中的位,然后将它们映射回float

答案 1 :(得分:1)

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

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

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


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

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

与Infinity比较

float f = INFINITY;
if (f == INFINITY)

答案 2 :(得分:0)

float编程语言中的c号跟在the IEEE Standard for Floating-Point Arithmetic (IEEE 754)之后。

您可以使用代码

float转换为int

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

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