(浮动)C中的类型转换

(浮动)C中的类型转换,c,casting,typecast-operator,C,Casting,Typecast Operator,我目前正在学习C和类型转换,它建议如果我想将int转换为float,我应该在变量前面加上(float),这样做 然而,当我不使用typecast时,答案仍然是正确的,即使我混合了int和float 有人能解释一下为什么/什么时候我需要特别使用typecast(float) #include <stdio.h> int main(void) { int A, B, E; float C, D; A = 2; B = 1; C = 12.5;

我目前正在学习C和类型转换,它建议如果我想将int转换为float,我应该在变量前面加上
(float)
,这样做

然而,当我不使用typecast时,答案仍然是正确的,即使我混合了int和float

有人能解释一下为什么/什么时候我需要特别使用typecast
(float)

#include <stdio.h>

int main(void) {
    int A, B, E;
    float C, D;

    A = 2;
    B = 1;
    C = 12.5;

    D = C * A + B;
    E = C * A + B;

    printf("Total is %.1f\n", D);
    printf("total is %d", E);
    return 0;
}
#包括
内部主(空){
INTA、B、E;
浮点数C,D;
A=2;
B=1;
C=12.5;
D=C*A+B;
E=C*A+B;
printf(“总计为%.1f\n”,D);
printf(“总计为%d”,E);
返回0;
}

按照惯例,如果一个算术表达式甚至有一个
float
变量,C将把它向上转换成一个
float
。因此,以下两个表达式最终将成为
float

int A = 3;
float F = 1.0;
float result1 = A * F;  // result is 3.0
float result2 = A / F;  // result is also 3.0
float result3 = A - F;  // result is 2.0
在实际代码中,您有以下表达式:

D = C * A + B;
按照操作顺序,我们可以将右侧改写为:

((C * A) + B);
C将对此进行如下评估:

((float + int) + int)
((float) + int)
float

您永远不需要显式地将类型转换为
float
,除非您想强制执行到
int
s之间的精确操作

int a = 10;
int b = 3;
a/b
产生
3
类型的
int
(因为它是整数除法),而
a/(float)b
产生
3.3333..
类型的
float


此外,C语言规范还确保可以在必要时将整数类型隐式转换为浮点(例如,使用另一个浮点的操作)。此外,如果将
float
值指定给
int
变量,则会出现变窄,在这种情况下,值会被截断。(§C11第6.3.1.4节)

您的代码正常。你的学习材料不是很好。除非没有其他选择,否则应该避免使用强制转换。M.M,我正在使用《C编程绝对初学者指南》,有比这更好的书吗?谢谢你的推荐,我没有特别的推荐,任何经过升级的线程都应该是goodC,没有使用“类型转换”这个术语<代码>(float)是强制转换操作符的一个示例。它指定显式类型转换。类型转换也可以在许多上下文中隐式完成。事实上,大多数转换都应该是隐式的,任何使用强制转换运算符的行为都应该被怀疑。这不是很好的措辞,例如
float=int/int+float
仍然进行整数除法