如果我问一个愚蠢的问题,请不要烧我,但我在复杂的陈述中遇到隐式类型转换的问题,我想学习它.
我的代码段是;
int a[]={156, 490, 647};
int b[]={218, 789, 461, 750};
int x=2, y=3;
float result;
result = (float) ( a[x] - b[y]) * 0,05 + 50;
printf ("%.2f", result);
Run Code Online (Sandbox Code Playgroud)
我在这里的意思是""(647-750)*0,05 + 50""
所以请求的输出是:
44,85
Run Code Online (Sandbox Code Playgroud)
我得到的是:
-0,00
Run Code Online (Sandbox Code Playgroud)
对不起,如果我做了一个愚蠢的错字,我想我放错了(浮动),但我不知道放在哪里.我尝试过很多东西,但无法解决.谢谢..
更改0,05到0.05.
我认为你来自世界的一个地方,,用作小数分隔符.但是C代码总是.用作小数分隔符,而不管编译区域设置如何.
在,你的代码是逗号运算符.
在C和C++编程语言中,逗号运算符(由标记表示)是一个二元运算符,它计算其第一个操作数并丢弃结果,然后计算第二个操作数并返回该值(和类型).
所以,你的表达式的评估如下:
result = (float) ( a[x] - b[y]) * 0;
Run Code Online (Sandbox Code Playgroud)
然后05 + 50评估并扔掉.或者编译器可能根本就不打扰它,只是完全优化它.
您可以像这样编写赋值语句,不需要转换:
result = (a[x] - b[y])*0.05 + 50;
Run Code Online (Sandbox Code Playgroud)
进行此更改时,输出正如您所期望的那样.