为什么这里不发生整数除法截断?
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
我正在浏览 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