按位浮点数到Int

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

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

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

编辑

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

或者,使用联合:

 typedef union { float f_; int i_; } FloatBits; FloatBits fb; fb.f_ = 1.5; 

然后fb.i_包含映射到int的float,以允许提取位。 同样,关于类型大小的常见假设 – 您可以使用sizeofvalidation这些。

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

要测试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) 

c编程语言中的float遵循IEEE浮点运算标准(IEEE 754) 。

您可以使用代码将float转换为int

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

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