S = 5/9*(H - 32.0)和S =(H - 32.0)*5/9的区别

S = 5/9*(H - 32.0)和S =(H - 32.0)*5/9的区别

S = 5/9*(H - 32.0)和S =(H - 32.0)*5/9的运算顺序不一样,结果也不一样。

S = 5/9*(H - 32.0)的运算顺序:

  1. (H-32.0)整个结果是double类型的
  2. 5/9是int/int,结果也是int类型,5/9=0.5555(double)=0(int)
  3. 0*double=0.0000,结果永远是0.0000(double)

S = S =(H - 32.0)*5/9的运算顺序:

  1. (H-32.0)整个结果是double类型的
  2. (H - 32.0)*5,double*int结果是double类型的
  3. (H - 32.0)*5/9,double/int结果是double类型,运算结果是(H-32.0)*0.55555...

C语言中int做除法会舍去余数,结果是整数商而非小数。从题目来看你希望进行浮点数计算,那么就不要养成5/9这种坏习惯写法(这个表达式单独拿出来,结果是int型,值为0),要写5.0/9(这个表达式结果为double型,值在0.5555左右)。这种差别是由C的隐式转换类型提升导致的。有时这么写不会出问题,那是因为表达式其他部分已经把operand隐式转换为double了,而如果保留这种坏习惯,很可能就会遇到表达式求值出错的bug。