按位浮点数到Int
我试图找出这个算法,但我得到谷歌的所有东西都是用铸造做的。 我需要知道细节。
所以,如果我们有一个浮点x并想要返回它的二进制表示,我们需要做什么?
我知道我们需要返回浮点数,如果它的NaN或无穷大,但其他步骤是什么?
编辑
该函数接受一个unsigned int,就像它是一个float一样,然后返回该数字所代表的整数。 我不能使用转换,只是条件和按位运算符。
或者,使用联合:
typedef union { float f_; int i_; } FloatBits; FloatBits fb; fb.f_ = 1.5;
然后fb.i_
包含映射到int
的float,以允许提取位。 同样,关于类型大小的常见假设 – 您可以使用sizeof
validation这些。
使用这种方法,您可以直接设置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
。