C语言 乘除运算时括号的顺序[已关闭]

mgdq6dx1  于 2023-01-04  发布在  其他
关注(0)|答案(1)|浏览(162)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。

昨天关门了。
Improve this question
考虑C语言中的以下语句

j=2 * 3 / 4 + 2.0 / 5 + 8 / 5;

如果考虑BODMAS规则进行括号:

j=(2 * (3 / 4)) + (2.0 / 5) + (8 / 5); // then j = 0

如果我们取C中运算符的优先级

j=((2 * 3) / 4) + (2.0 / 5) + (8 / 5); // then j = 2

哪个是正确的顺序?

lbsnaicq

lbsnaicq1#

你误解了BODMAS(或者像我这样的美国人,PEMDAS)。它不是一次一个严格的,按顺序应用。括号内,它分组为(B)(O)(DM)(AS)。除法和乘法是 * 相同 * 的优先级(在小学算术和C运算符优先级中);同样,加法和减法的优先级是相同的。你会注意到美国的缩写甚至颠倒了D和M;这没关系,因为它们的优先级相同,但是试图把M和D放在同一个空格里会很难看,所以我们就蒙混过关了。
小学和C approach work from left to right when the operators are equal precedence,因此正确的求值顺序为:

j=((2 * 3) / 4) + (2.0 / 5) + (8 / 5);

相关问题