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;
我有这些变量
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;