不同数据类型进行数学运算和转化到规则

个人总结:当不同数据类型之间进行数学运算时,会自动把结果转化成拥有最高精度的类型。

如果我们又加入了强制类型转化,需要根据运算优先级在对应对时候做转化。

//类型转换运算符优先级低于括号,高于运算符

例如:

#include

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)自动会转化成浮点数

你可能感兴趣的:(programming)