为什么这里不发生整数除法截断?

Why does integer division truncation not occur here?

我正在浏览 K&R 中的示例,偶然发现了这段代码:

celcius=5 * (fahr-32) / 9;

作者说我们不能使用5/9,因为整数除法截断会导致值为0。

然而,程序在 fahr=0 时输出 17 作为答案。根据我的计算,(0-32)/9 应该导致 -3(由于截断)然后 -3*5 = -15,而不是 -17。为什么会这样?

(0 - 32) 首先乘以 5,得到 -160。 -160 / 9 = -17。

作者说的是不应该用

celsius = (fahr-32)*(5/9);


关于你的问题,

celsius = 5 * (fahr-32) / 9;

不同于

celsius = 5 * ((fahr-32) / 9);

在后一种情况下,当 fahr=0.

时,您确实会得到 -15