繁体   English   中英

算术表达式为printf arg

[英]Arithmetic expression as printf arg

我不明白为什么

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

打印600万

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

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

表达式(4 + 2 % -8)产生一个整数,并且您尝试打印浮点数(它们不匹配)。

在第一种情况下,整数将转换为float (由于赋值),因此稍后在printf可以使用,因为该值采用%f期望的格式。

尝试这个:

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

这是因为这里:

float x = (4+2%-8);

(4+2%-8)的类型为int但是由于x的类型而被转换为float 但是,这里:

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

没有执行任何强制类型转换,因此您将传递一个int ,该int期望一个float值给您一个垃圾值。 您可以使用简单的演员表修复此问题:

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

在第一个代码段中,由于赋值,结果int值隐式转换为float ,在第二个代码段中,您对编译器撒谎:您告诉它期望使用double类型的值,但“发送”一个int类型的值。

不要骗编译器。 它将报仇。

请注意, printf转换说明符"%f"期望使用double类型的值,但“发送” float是可以的,因为在调用函数之前,该值会自动转换为double

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM