那么,我有这两个问题吗?
#include <stdio.h>
int main(void)
{
float a = 0.7;
if (0.7 > a)
printf("Hi\n");
else
printf("Hello\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这将是什么输出?据我说,它应该是"你好".
其次,我有,
#include <stdio.h>
int main(void)
{
int a=500,b=100,c;
if (!a >= 400)
b=300;
c=200;
printf("%d %d\n",b,c);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
据我所知,输出应该是,
100 200
Run Code Online (Sandbox Code Playgroud)
因为!一个手段,而不是一个手段,这意味着,一个非500的值与400相比,它可以大于或小于400,那么为什么它会是300?
您没有将浮点变量与浮点值进行比较.你认为你会这样做,但你不是.您正在将float变量与double literal进行比较.
在C中0.7是精确的数学数字0.7,四舍五入到最接近的双精度浮点数.
当初始化float a = 0.7时,该双精度浮点数被舍入为单精度,结果存储在a中.舍入很可能会改变该值,因此变量a的内容稍微多一点或略小于0.7.
然后你比较变量0.7.一个是四舍五入到单精度,另一个是四舍五入到双精度,所以两者都不同.
作为一项规则,你永远不应该使用浮动而不是双倍,除非你有充分的理由这样做,你可以在被问及时证明这一点.
另一方面,你有多大可能与这里的其他多个海报提出完全相同的问题(完全相同的数字,0.7而不是0.8或0.9或3.14或类似的东西),所以我想你正在尝试让我们在这里做你的功课吧?