我目前正在学习C语言和类型转换,并建议如果我想将int转换为浮点数,我应该在变量之前加(float)
来执行此操作。
然而,当我不使用类型转换时,答案仍然正确,即使我正在混合整数和浮点数。
有人可以解释为什么/何时我需要特别使用类型转换(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;
}
答案 0 :(得分:2)
除非你想在float
之间强制进行精确操作,否则你永远不需要明确地对int
进行类型转换,例如
int a = 10;
int b = 3;
a / b
会产生3
类型的int
(因为它是整数除法),而a / (float)b
会产生3.3333..
类型的float
。< / p>
C语言规范另外确保您可以在必要时将整数类型隐式转换为float(例如,使用另一个float的操作)。此外,如果为float
变量分配int
值,则会发生缩小,在这种情况下,值会被截断。 (C11的第6.3.1.4节)
答案 1 :(得分:1)
按照惯例,如果表达式甚至有一个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