微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用printf时输出意外的双精度值

如何解决使用printf时输出意外的双精度值

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

输出

1717986918

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

解决方法

这是一个post问题。
使用"%d",编译器被告知正在打印的数据类型为int,但是变量的类型为float,导致format specifier,从而导致大小写为1717986918

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

更改此:

printf("%d",a);

对此:

printf("%f",a);

如果您在编译器设置中使用-Wall或同等版本进行编译,则会发出警告,通知您。

,

您的代码具有未定义的行为。尚未定义代码的输出内容,就任何程序员而言,代码spawns nasal demons都是如此。

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

我对您的计算机和编译器实现的假设很多,例如您的编译器使用IEEE754标准表示浮点数,而int的大小为4个字节,并且您的电脑使用小尾数法。根据{{​​3}},双精度数字7.1表示为IEEE754双精度数字时,将作为0x401C666666666666数字存储为8个字节。然后,这些字节作为可变参数传递给printf。由于要传递体系结构参数的方式,因此将从{number}的最低有效4个字节中提取printf %d格式说明符,从而打印出0x66666666数字的基数10,就是1717986918

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。