我有一个C语言的赋值,它给我一个浮点数,并且必须使用IEEE-754格式打印它:
__(sign)mantissa * 2^(exponent)__符号为'-‘或’',指数为int值,尾数为浮点值。除了stdio.h中的函数(针对printf函数)之外,我还不能使用struct或任何库中的函数。这应该使用按位操作来完成。
我被赋予两项职能:
在将浮点数表示为无符号int之后,我设法确定了任何浮点数的符号和指数。我还设法确定尾数的比特数。例如,给定浮点数3.75:
> bit representation: 01000000011100000000000000000000;
> sign: 0 (' ');
> exponent = 10000000 (128 - bias = 1)
> mantissa = 11100000000000000000000现在,在这个示例中,我应该将尾数表示为"1.875“。然而,我一直未能做到这一转变。到目前为止,我已经尝试创建另一个浮点数为0000000mantissa,但它给了我错误的结果(我现在明白了原因)。我被告知尾数在开头有一个1,意思是在这个例子中,尾数会变成1.111,但是我没有被告知如何做到这一点。我试着在网上搜索,但是找不到在尾数开头添加1的任何方法。
我还想通过遍历尾数的每一个部分并得到它的十进制表示,然后添加1来完成这个部分。
> 11100000000000000000000
> as_float = 2^-1 + 2^-2 + 2^-3
> as_float += 1然而,这种方法似乎非常黑客,缓慢,可能会给我错误的结果。
这么说,我完全没有想法了。我将如何表示浮点数的尾数作为它自己的东西?
发布于 2018-04-10 21:15:47
float转换为unsigned int。&)。&和OR |)。unsigned int转换为float。printf打印新值。这是因为清除符号位并将指数设置为偏置使您使用(positive)mantissa * 2^0 = mantissa,因此printf将为您打印尾数。
https://stackoverflow.com/questions/49762724
复制相似问题