我无法理解为什么
float x = (4+2%-8);
printf("%f\n", x);
打印6.000000和
printf("%f\n", (4+2%-8));
打印0.000000。任何信息都会有所帮助。 问候。
答案 0 :(得分:7)
表达式(4 + 2 % -8)
产生一个整数,你试图打印一个浮点数(它们不匹配)。
在第一种情况下,整数转换为float
(由于赋值),因此稍后printf
起作用,因为该值的格式为%f
期望。
试试这个:
printf("%f\n", (4.0 + 2 % -8));
^
答案 1 :(得分:2)
这是因为在这里:
float x = (4+2%-8);
(4+2%-8)
的类型为int
,但转换为float
,因为这是x
的类型。但是,这里:
printf("%f\n", (4+2%-8));
没有执行强制转换,所以你传递int
,它期望float
给你一个垃圾值。您可以通过简单的演员来解决这个问题:
printf("%f\n", (float)(4+2%-8));
答案 2 :(得分:2)
在第一个代码段中,由于分配,生成的int
值会隐式转换为float
,在您对编译器说谎的第二个代码段中:您告诉它期望值为{{{ 1}}但是“发送”类型为double
的值。
不要欺骗编译器。它会报复。
请注意,int
转换说明符printf
需要类型为"%f"
的值,但“发送”double
是正常的,因为该值会自动转换为{{ 1}}在调用函数之前。