gpt4 book ai didi

c - printf 格式和参数不一致

转载 作者:太空宇宙 更新时间:2023-11-04 00:40:31 25 4
gpt4 key购买 nike

对于下面的代码:

#include <stdio.h>
int main(){
printf("%f", 5);
printf("%d", 5.01);
}

第一个语句将打印 0.000000,第二个语句将打印一个大数字。

我认为 printf 看到格式 %f 将从堆栈中弹出一个 4 字节的参数。然后我查阅了一些引用资料,说 printf 函数会将 float 转换为 double ,即 8 字节参数。所以我认为它可能会打印出一个不可预测的值。但是它怎么能打印出 0.000000。

第二个也很奇怪。 5.01的二进制格式应该是0 10000001 01000000101000111101100(0x40A051EC),十进制格式应该是1084248556,但是语句的结果是1889785610,为什么会这样?

最佳答案

这令人困惑,但是 %d 是整数的格式,例如 %i(大多数人认为它是 double 因为 %f 用于 float ,但不是)。你不能将它与 double 一起使用,你必须使用 %f。与 %f 相同,您不能使用整数;您必须使用 float 或 double 。

此外,printf 不会检查您使用的类型,它只是盲目地将字节解释为您告诉它的类型。将错误的类型与错误的类型说明符一起使用会产生未定义的行为,这就是为什么你会看到你现在的样子。

关于c - printf 格式和参数不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10398925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com