C中的隐式类型转换

use*_*849 0 c casting

如果我问一个愚蠢的问题,请不要烧我,但我在复杂的陈述中遇到隐式类型转换的问题,我想学习它.

我的代码段是;

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)

对不起,如果我做了一个愚蠢的错字,我想我放错了(浮动),但我不知道放在哪里.我尝试过很多东西,但无法解决.谢谢..

Dav*_*nan 5

更改0,050.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)

进行此更改时,输出正如您所期望的那样.