关于括号的使用

On use of parenthesis

所以我在查看一些 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 语句的计算结果为真。

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

你可以说:"The use of parentheses makes the precendence of evaluation explicit, disregarding of the operator precendence of the language in use."

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

因此,总是使用括号以防出现歧义,或者至少在您掌握所用语言之前,这听起来是个明智的主意。

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

在这个例子中 - c+d > 180 AND a+b+c+d >= 320 可能凭着想象力)被解释为 (c + d) > (180 AND a) + b + c + (d > 320).出于这个原因,有必要添加括号以消除所有歧义。