【发布时间】:2017-02-14 09:19:40
【问题描述】:
我正在尝试用二进制表示小数,然后将其打印为浮点数。我已经完成了定点到浮点的转换。
十进制数:-342.265625
定点:-101010110.010001
32 位浮点数:11000011101010110010001000000000
64 位浮点数(双精度):1100000001110101011001000100000000000000000000000000000000000000
*我已经用 IEEE 754 转换器仔细检查过
*我也知道 printf 将浮点数更改为双精度以打印它们,但是将其声明为双精度应该可以吗?我以为……?
代码:
int main()
{
float floaty = 0b11000011101010110010001000000000;
double doubley = 0b1100000001110101011001000100000000000000000000000000000000000000;
printf("Float: %f\n", floaty);
printf("Double: %lf\n", doubley);
}
输出:
Float: 3282772480.000000
Double: 13868100853597995008.000000
编译器是gcc,标准是c99
【问题讨论】:
-
0b必须是 gcc 扩展。如果您能找到有关它如何与浮点初始化一起工作的文档,那就太好了。 -
@CST-Link 打印
floaty应该没关系 -
@CST-Link 在 C 中,尾随参数受默认参数提升的影响,它将浮点数提升为双精度。说明符 f 和 lf 对 double 或 float 有效。 OP 正在使用最好的选择。
-
@CST-Link
printf格式%f用于double并且任何float参数都提升为double,其方式与%dachar相同参数被提升为int。 -
哈哈...显然我am错了...谢谢大家睁开眼睛。
标签: c binary floating-point printf