【问题标题】:Order of parenthesis in case of multiplication and division乘法和除法时括号的顺序
【发布时间】:2023-01-02 10:13:17
【问题描述】:

考虑以下 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

哪一个是正确的顺序?

【问题讨论】:

  • 两者都是“正确的”。
  • 当这在 C 中执行时,结果将取决于编译器? @艾伦风

标签: c parentheses


【解决方案1】:

你误解了 BODMAS(或者像我这样的美国人,PEMDAS)。一次不是严格的,按顺序申请。括号内,它分组为 (B)(O)(DM)(AS)。除法和乘法是相同的优先级(小学算术和 C 运算符优先级);同样,加法和减法的优先级相同。您会注意到美国首字母缩略词甚至翻转了 D 和 M;没关系,因为它们的优先级相同,但试图在同一空间中用 M 和 D 渲染一个词会很丑陋,所以我们只是捏造它。

当运算符优先级相同时,grade school 和 C 方法都从左到右工作,因此正确的评估顺序是:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多