ali*_*der 2 c floating-point gcc
情况1:
printf("%f",(7/2));
gcc输出为0.000000.
案例2:
float k= 7/2;
printf("%f",k);
gcc输出为3.000000.
在第一种情况下,printf需要浮点但得到Integer所以给出了错误的结果.但在第二种情况下,它进行类型转换.
这是我的问题 -
在第二种情况下,它默认进行类型转换,但为什么不在第一种情况下呢?
在第一种情况下7
,2
两者都是int
类型.除7
由2
会给你一个int
.打印它将%f
调用未定义的行为.你会得到任何东西.在这种情况下,没有类型转换.
试试这个
printf("%f", (7.0/2));
Run Code Online (Sandbox Code Playgroud)
在第二种情况下k
是float
类型,因此结果7/2
被转换为k
默认类型.
为什么gcc在第一种情况下不会出现类型不匹配错误/警告?
使用-Wall
flag 编译第一个语句会发出警告:
[Warning] format '%f' expects argument of type 'double', but argument 2 has type 'int' [-Wformat=]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
229 次 |
最近记录: |