奇怪的 printf 输出[重复]

2023-12-06

我执行了以下代码

#include <stdio.h>

int main()
{
    printf("%f\n", 9/5);
}

输出 :0.000000

why not 1 ?

如果我写printf("%f %f %d %d\n", (float)9/5, 4, sizeof(float), sizeof(int));

那么输出是1.800000 0.000000 4 59

why not 1.800000 4 4 4

在我的机器上sizeof (float) is 4

提前致谢


这是因为你的printf格式说明符与您传递的内容不匹配:

9/5属于类型int. But printf期望一个float.

因此,您需要将其转换为浮点数或将文字设置为浮点数:

printf("%f\n", (float)9/5);
printf("%f\n", 9./5);

至于你为什么会得到0.0,这是因为printf()正在读取的二进制表示1(一个整数)并将其打印为float。这恰好是一个非常接近的小非规范化值0.0.

EDIT :还有一些与可变参数的类型提升有关的事情。

在可变参数函数中,float被提升为double. So printf()在这种情况下,实际上需要一个 64 位参数来保存double。但是您只向它传递了一个 32 位操作数,因此它实际上从堆栈中读取了额外的 32 位(在本例中恰好为零) - 甚至更多未定义的行为。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

奇怪的 printf 输出[重复] 的相关文章

随机推荐