为什么这两种运算结果不一样

double c,a=5;
c=3a/2;和c=3/2a;
为什么结果不一样,计算机的运算顺序怎么区别?

* /的优先级相同,结合律都是从左到右
3 * a / 2等价于(3 * a) / 2,先计算3 * a,由于adouble类型,故3自动转换为double,故得到3 * a得结果为double类型15.0,然后再计算15.0 / 2,同样把2转换为double类型,最终结果为double类型7.5
3 / 2 * a等价于(3 / 2) * a,先计算3 / 2,由于它们都是int类型,/按整除计算,3 / 2 = 1,然后再计算1 * a,把1转换为double类型,最终结果为double类型5.0

算术运算从左到右
那么你先算3a,a是double型,结果也是double型
如果你先算3/2,3和2都是int型,结果也是int型,丢精度了

由于浮点数的精度有限,浮点运算是不可结合的。

*和/运算的优先级相同,采用从左向右的方向计算。c=3a/2,3a先算,a是双精度型,故3a自动变成双精度型,3a/2也变成双精度型,过程为3a=15.000000,3a/2=7.500000;c=3/2a,3/2先算,由于3和2均为整型数,得到的结果1.5自动变成1,那么c=a=5.000000