21

我想知道编程语言中的运算符优先级是否取决于实现,或者是否存在所有语言都遵循的固定规则。如果可能的话,您能否将以下运算符按最高优先级排序:AND、OR、NOT、XOR。

4

5 回答 5

20

我用谷歌搜索并发现表明某些语言(如 APL 和 SmallTalk)没有运算符优先规则,它们严格地从左到右/从左到右评估表达式。

但是,在大多数语言中,尤其是从 C 派生的语言中,遵循的相对优先顺序是 NOT > XOR > AND > OR

于 2012-09-19T12:35:24.900 回答
12

您已经看到,当表达式将 && 与 || 混合时 评估必须以正确的顺序进行。括号可用于将操作数与其正确的运算符分组,就像在算术中一样。与算术运算符一样,逻辑运算符具有确定在没有括号的情况下如何分组的优先级。

在表达式中,优先级最高的运算符首先与其操作数分组,然后下一个最高优先级的运算符将与其操作数分组,依此类推。如果有多个具有相同优先级的逻辑运算符,则从左到右检查它们。

程序员通常使用括号将操作数组合在一起以提高可读性,即使单独使用运算符优先级也是如此。

在此处输入图像描述

资源

于 2018-10-20T09:06:53.267 回答
4

布尔还是按位?没有固定的规则,大多数语言都有类似的规则,但细节不同。在语言定义中查找。

于 2012-09-21T18:42:29.483 回答
3

有三个基本的布尔运算符:NOT、AND、OR。XOR 只是A AND NOT B OR NOT A AND Bor的一个简单版本(A OR NOT B) AND (NOT A OR B)。所以,只有这三个有共同的优先级:NOT > AND > OR。XOR 在语言中具有不同的地位,但它的优先级肯定不高于 AND 也不低于 OR。大多数语言(例如 C/C++/Javascript 等)在 AND 和 OR 之间都有它,但在其他语言(例如 Perl)中,XOR 与 OR 具有相同的优先级。

(OR 只能用 AND 和 NOT 表示,但它仍然是基本运算符A OR B = NOT(NOT A AND NOT B):)

于 2016-03-30T21:38:12.497 回答
1

证明 AND 的优先级高于 OR 的明显且简单的方法是比较带括号和不带括号的语句的结果:

std::cout << std::boolalpha;
std::cout << ( true || false && false )     << std::endl;   // gives true
std::cout << ( ( true || false ) && false ) << std::endl;   // gives false
于 2021-01-03T22:57:52.367 回答