为什么 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)
我目前正在阅读关于 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)