#include<stdio.h>
#include<math.h>
int main()
{
printf("%f",3/2);
printf(" %d",3/2);
printf(" %d",3<<2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是我的代码,我期望获得1.50000 1 12
但我收到了2.168831 1 12
作为我的输出.
您会得到错误转换的字节(您传递的整数)和堆栈中的瞬态数据,格式化为浮点数.@ H2CO3给了一个很好的参考.
这是因为你传递了一个int,但是你已经告诉过它printf()需要一个浮点值(特别是一个双精度值).如果您使用%f作为格式,则需要传递一个double.如果不这样做,将导致对堆栈上未定义/垃圾值的未定义和错误访问.
两个操作数整数3 / 2将执行整数除法.使一个或两个操作数加倍,即3.0 / 2,你将有浮点除法&printf()将按预期运行.