我正在试图找出这个算法,但我得到谷歌的所有东西都是用铸造做的。我需要知道细节。
因此,如果我们有一个浮点x并想要返回它的二进制表示,我们需要做什么?
我知道我们需要返回浮点数,如果它的NaN或无穷大,但其他步骤是什么?
修改
该函数接受一个unsigned int,就像它是一个float一样,然后返回数字所代表的整数。我不能使用转换,只是条件和按位运算符。
答案 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
。