个人总结:当不同数据类型之间进行数学运算时,会自动把结果转化成拥有最高精度的类型。
如果我们又加入了强制类型转化,需要根据运算优先级在对应对时候做转化。
//类型转换运算符优先级低于括号,高于运算符
例如:
#include<iostream>
int main(int argc, char*argv[])
{
int a = 3;
int b = 17;
float c = 31.0f;
//类型转换运算符优先级低于括号,高于运算符。
printf("%f float(a/b)*c \n",float (a/b)*c); //首先进行a/b运算,然后把结果转成float,然后与c相乘
printf("%f (float(a/b))*c \n",(float(a/b))*c); //首先进行a/b运算,然后把结果转成float,然后与c相乘
printf("%f (float(a/b))*c \n",(float) a/b*c); //首先把a转成浮点,然后除以b,然后乘以c
printf("%f a/b*c \n", a/b*c); //运算规则同数学运算。a/b=0, 0*c=0.00000f
printf("%f a/(b*c) \n", a/(b*c)); //运算规则同数学运算。b*c=527.00000f, a/527.0000f=0.005693
return 0;
}
运行结果:
0.000000 float(a/b)*c
0.000000 (float(a/b))*c
5.470588 (float(a/b))*c
0.000000 a/b*c
0.005693 a/(b*c)
参考: https://blog.csdn.net/qq_34133578/article/details/80534092
在实验课中涉及到 int - float的 区别,
注意到
倘若 由
int a;
int b;
float c;
a=1;
b=2;
c=(a+b)/10;
得到c将会是0.0000
实际上这计算应该是
c=float((a+b)/10);
实际上是先整数计算(a+b)/10,此时的输出实际上是被截去了小数部分,再转化为float数,
修改程序应该是
int a;
int b;
float c;
a=1;
b=2;
c=(a+b)*0.1;
这样(a+b)自动会转化成浮点数