Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
#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
作为我的输出。
您会得到混合错误转换的字节(您传递的整数)和堆栈中的瞬态数据,格式为浮点数。@H2CO3 提供了很好的参考。
这是因为您正在传递一个int,但您已告知printf()期望一个浮点值(特别是双精度值)。如果使用 %f 作为格式,则需要传递一个双精度。不这样做会导致未定义和错误地访问堆栈上的未定义/垃圾值。
int
printf()
两个操作数整数3 / 2都将执行整数除法。使一个或两个操作数加倍,即3.0 / 2,您将进行浮点除法 & printf() 将按您预期的方式运行。
3 / 2
3.0 / 2