Q为什么代码
double degC, degF; degC = 5 / 9 * (degF - 32);总是给我 0?
A如果二元运算符的两个操作数都是整数,C 语言会执行整数运算,无论表达式的其余部分是什么类型。在本例中,整数运算是截断除法,得到 5 / 9 = 0。(但请注意,子表达式以意外类型计算的问题不仅限于除法,也不限于类型int。)如果你将其中一个操作数转换为float或double,或者使用浮点数常量,例如
degC = (double)5 / 9 * (degF - 32); or degC = 5.0 / 9 * (degF - 32);,它就会按你预期的方式工作。请注意,转换必须应用于其中一个操作数;转换结果(如(double)(5 / 9) * (degF - 32))则无效。
另请参阅问题 3.14。
参考资料:K&R1 第 1.2 节第 10 页,第 2.7 节第 41 页
K&R2 第 1.2 节第 10 页,第 2.7 节第 44 页
ISO 第 6.2.1.5 节
H&S 第 6.3.4 节第 176 页