为什么 C 不截断这个?

Why does C not truncate this?

我目前正在阅读关于 C 的 K&R 书籍,我目前正在编写温度转换器代码,它在这里说 cels = 5 * (fahr-32) / 9; 我们不是将它乘以 5/9,而是乘以 5,然后除以 9 因为它会截断,但我的代码不会截断它是我做错了什么还是这是现代 C 中的新功能?这是我的代码

#include <stdio.h>

int main(){
    int fahr, cels;
    int lower, upper, step;

    lower = 0;
    upper = 300;
    step = 20;
    fahr = lower;
    while (fahr <= upper) {
        cels = (fahr - 32) * 5/9;
        printf("%d\t%d\n", fahr, cels);
        fahr = fahr + step;
    }
}

编辑: 而不是 cels = (fahr - 32) * 5/9; 我做了 cels = 5/9 *(fahr - 32); 并且它截断了代码。为什么一个能用,一个不能用?

当您执行 (fahr - 32) * 5/9 时,这与 ((fahr - 32) * 5)/9 相同,因为 */ 具有相同的优先级并且是左关联的。但是,当您执行 5/9 *(fahr - 32) 时,出于同样的原因,这与 (5/9) *(fahr - 32) 相同。

在所有情况下,整数除法都会截断为 0,所以重要的是你是乘 然后 除法(这会给你“正确”的结果)还是除法 then mulitply(当 5/9 截断为 0 时总是给你 0)