【问题标题】:On use of parenthesis关于括号的使用
【发布时间】:2016-02-17 12:56:03
【问题描述】:

所以我在查看一些 A-Levels 计算机科学过去的论文时,偶然发现了这个:

现在,我的第一反应是第 6 行不需要括号。原因是代数运算符优先于比较优先于布尔运算符。

作为 Java 的一个小例子:

        int a = 100;
        int b = 100;
        int c = 100;
        int d = 100;

        if( ((c+d) > 180) && ((a+b+c+d)) >= 320)
            System.out.println("greater");

        if(c+d > 180 && a+b+c+d >=320)
            System.out.println("greateragain");

两个 if 语句都被评估为真。

那么,在这种情况下,我认为括号仅用于人类可读性是正确的还是...?

【问题讨论】:

  • 嗯,这取决于第一个 sn-p 中语言的语义(绝对不是 Java...)
  • 如果相关语言的比较运算符的优先级高于加法运算符,则需要括号,因此它不会计算为 c + (d >= 180)。但就像有人说的那样,这并不是 java 很难知道的......
  • 运算符优先级取决于语言语法。如有疑问,请加上括号。这就是他们来这里的原因。
  • 同意这完全取决于语言,但我建议以特定方式编写任何代码以使其更具可读性是一个非常重要的考虑因素。尤其是对于不熟悉该语言的人,他们仍然可以阅读该代码并确切地知道它在做什么。
  • 在我看来像BASIC - 添加标签希望有人能认出方言。

标签: basic


【解决方案1】:

你可以说:“括号的使用使得评估的优先级明确,而忽略了所用语言的运算符优先级。”

上面的 cmets 很好地描述了运算符优先级是特定于语言的。例如,在 Pascal 中,AND 等逻辑运算符似乎比数学运算符具有更高的优先级,并被解释为二进制 AND。相比之下,在 C 中,&& 的优先级较低,因此您可以省去一些括号。

因此,在可能出现歧义的情况下,或至少在您掌握所使用的语言之前,始终使用括号听起来是一个明智的主意。

【讨论】:

    【解决方案2】:

    BASIC 是利用逻辑运算符和位运算符可以共享相同助记符这一事实的早期语言之一。

    在示例中 - c+d > 180 AND a+b+c+d >= 320 可能想像力)已被解释为 (c + d) > (180 AND a) + b + c + (d > 320)。因此,有必要添加括号以消除所有歧义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-12
      • 1970-01-01
      • 2012-02-16
      • 1970-01-01
      • 2014-10-30
      相关资源
      最近更新 更多