为什么printf输出double的随机值和int的0.000000?

我知道这是一个简单的问题,但是当我编码时它出现了,我想知道它现在是如何工作的。 所以,我的第一个问题是,当printf给出一个如下所示的整数,但期望%f浮点值时,为什么它总是输出0.000000? 我在Linux终端的GCC上运行它。

int main() { int a = 2, b = 5, result = 0; result = b/a*a; printf("%f\n", result); } //Above printf statement outputs 0.000000 every time. 

然后当我使用下面的代码并在期望%i整数值时给printf一个double,输出总是随机/垃圾。

 int main() { double a = 2, b = 5, result = 0; result = b/a*a; printf("%i\n", result); } //Above printf statement outputs random numbers every time. 

我完全理解上面的代码是不正确的,因为printf输出类型与我输入的不一样,但我希望它对每种forms的错误采取相同的方式,而不是像这样改变。 只是抓住了我的好奇心所以我想我会问。

基本上是因为如果你将构成一个小整数的位解释为它们是一个double,它看起来像是0的double值。而如果你将表示一个小的double值的位解释为整数,它看起来像更多的东西有趣。 以下是一个页面链接,该页面描述了这些位如何用于表示双精度 : http : //en.m.wikipedia.org/wiki/IEEE_floating_point 。 通过这个链接和一点耐心,您实际上可以计算出给定double将被解释为的整数值。

您使用了错误的格式说明符应该是

 int a = 2, b = 5, result = 0; result = b/a*a; printf("%d\n", result); ... double a = 2, b = 5, result = 0; result = b/a*a; printf("%f\n", result);