c-使用printf时出现意外的双值输出


#include <stdio.h>
int main()
{
double  a=7.1;
printf("%d",a);
return 0;
}

输出:

1717986918

当我编写这个程序并使用签名格式说明符到方法printf()时。为什么我得到这个值?

这是一个格式说明符问题
使用"%d",编译器被告知要打印的数据类型为int类型,但变量为float类型,从而导致未定义的行为,在这种情况下产生值1717986918

类型float的格式说明符是"%f",而不是"%d"

更改此项:

printf("%d",a);

对此:

printf("%f",a);

如果您在编译器设置中使用-Wall或等效工具进行编译,则会发出警告。

您的代码有未定义的行为。它没有定义你的代码输出应该是什么,对于任何程序员来说,你的代码都会滋生鼻恶魔。

为什么我在我的Cprogram中得到这个输出?

我假设很多关于您的计算机和编译器实现的信息,例如您的编译器使用IEEE754标准来表示浮点数,int的大小为4字节,并且您的计算机使用小端序。根据该站点,当表示为IEEE754双精度数时的双精度数7.1被存储为8字节作为0x401C666666666666数。然后将这些字节作为变参数传递给printf。由于架构参数的传递方式,从该数字中提取最低有效的4个字节用于printf%d格式说明符,这将导致打印0x66666666数字的基10表示,即1717986918

相关内容

  • 没有找到相关文章

最新更新