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

时间:2014-03-23 02:54:43

标签: c printf

我知道这是一个简单的问题,但是当我编码时它出现了,我想知道它现在是如何工作的。所以,我的第一个问题是,当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输出类型与我输入的不一样,但我希望它对每种形式的错误采取相同的方式,而不是像这样改变。只是抓住了我的好奇心所以我想我会问。

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

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

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);