(浮动)C中的类型转换
我目前正在学习C和类型转换,它建议如果我想将int转换为float,我应该在变量前面加上(浮动)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;
(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
仍然进行整数除法