[英]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.