算术表达式为printf arg

时间:2011-10-13 11:01:04

标签: c

我无法理解为什么

float x = (4+2%-8);
printf("%f\n", x);

打印6.000000和

printf("%f\n", (4+2%-8));

打印0.000000。任何信息都会有所帮助。 问候。

3 个答案:

答案 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}}在调用函数之前。