在C中进行类型转换并使用括号

时间:2016-02-04 01:27:21

标签: c casting parentheses

我有这些变量

distance = 945
speed = 614

我希望以小时和分钟来获得时间,所以我将距离/速度分开以获得时间。现在,如果我想要分钟作为整数,我有以下代码:

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

这个表达式给出了32分钟的值,但是,当我第一次尝试时,我想让代码更“可读”,我尝试了下面给出0的选项:

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

请注意,括号被添加并位于不同的位置,因此为什么在看起来不错的地方使用括号会干扰计算并在变量中设置值0。我想它与类型转换过程有关,但括号位于应该使表达更清晰的地方。

我有正确的答案,程序运作正常,但我想在将来的场合理解这一点,因为我花了一点时间玩括号。谢谢

1 个答案:

答案 0 :(得分:4)

  

那么为什么在看起来不错的地方使用括号会干扰计算并在变量中设置0的值。

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

  • 在您的第一个声明中:

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

首先评估(float) (distance%speed)

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

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

您的额外()会导致首先评估(distance%speed) / speed * 60,因此广告(float)变得无关紧要。

  

我想让代码更具有可读性"

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

int distance_m = 945;
int speed_kph = 614;