C 中的类型转换和括号的使用

Typecasting in C and use of parentheses

我有这些变量

distance = 945
speed = 614

我想得到小时和分钟的时间,所以我除以 distance/speed 以获得小时数。现在,如果我想要分钟作为整数,我有以下代码:

int minutes;
minutes = (float) (distance%speed) / speed * 60;

这个表达式给出了 32 分钟的值,但是,当我第一次尝试时,我想使代码更多 "readable" 并且我尝试了以下给我 0 的选项:

minutes = (float)  ( (distance%speed) / speed * 60 );
minutes = (float) ( (distance%speed) / speed  ) * 60;

注意括号是加的,而且是在不同的地方,为什么在我觉得没问题的地方用括号会干扰计算,把变量的值设置为0。我想这与类型转换过程有关,但括号位于应该使表达式更清晰的地方。

我有正确的答案并且程序运行正常,但我想了解这一点以备将来使用,因为我花了一点时间来研究括号。谢谢

so why using parentheses in places that look fine to me interfere with the calculation and sets the value of 0 in the variable.

那是因为额外的括号 () 会使您在第二个语句中对 float 的强制转换无效。

  • 在你的第一句话中:

minutes = (float) (distance%speed) / speed * 60;

这里先计算(float) (distance%speed)

  • 但是在你的第二个陈述中:

(float) ( (distance%speed) / speed * 60 );

你的额外 () 导致 (distance%speed) / speed * 60 首先被评估,因此转换 (float) 变得无关紧要。

I wanted to make the code more "readable"

与"readability"相关,虽然在这里添加更多的括号肯定没有帮助,但 Kingsley 的建议(添加单位)是一个好方法。例如,

int distance_m = 945;
int speed_kph = 614;