0
#include<stdio.h>
#include<math.h>
int main()
{

printf("%f",3/2);
printf(" %d",3/2);
printf(" %d",3<<2);
return 0;

}

这是我的代码,我希望得到 1.50000 1 12

但我收到了 2.168831 1 12

作为我的输出。

4

1 回答 1

5

您会得到混合错误转换的字节(您传递的整数)和堆栈中的瞬态数据,格式为浮点数。@H2CO3 提供了很好的参考。

这是因为您正在传递一个int,但您已告知printf()期望一个浮点值(特别是双精度值)。如果使用 %f 作为格式,则需要传递一个双精度。不这样做会导致未定义和错误地访问堆栈上的未定义/垃圾值。

两个操作数整数3 / 2都将执行整数除法。使一个或两个操作数加倍,即3.0 / 2,您将进行浮点除法 & printf() 将按您预期的方式运行。

于 2013-10-20T10:01:14.593 回答