我想知道编程语言中的运算符优先级是否取决于实现,或者是否存在所有语言都遵循的固定规则。如果可能,您可以先订购具有最高优先级的以下运算符:AND,OR,NOT,XOR。
答案 0 :(得分:10)
我用Google搜索并发现this,其中说APL和SmallTalk等某些语言没有运算符优先级规则,并且它们严格评估从左到右/从左到右的表达式。
然而,遵循的相对优先顺序不是> XOR> AND>或者在大多数语言中,特别是那些源自C
的语言答案 1 :(得分:4)
您已经看到,当表达式将&&与||混合时必须按正确的顺序进行评估。像算术一样,可以使用括号将操作数与正确的运算符分组。与算术运算符一样,逻辑运算符具有优先级,该优先级确定在没有括号的情况下如何对事物进行分组。
在表达式中,优先级最高的运算符将首先与其操作数分组,然后第二高的运算符将与其操作数分组,依此类推。如果存在多个具有相同优先级的逻辑运算符,则会从左到右对其进行检查。
对于程序员来说,即使单独使用运算符优先级也可以使用括号将操作数分组以提高可读性,这很常见。
对Java的简单测试,这些是正确的:
@Test
public void booleanPrecedenceTest() {
boolean A = true, B = false, C = true, D = false;
Assert.assertTrue((A || B && C) == (A || (B && C)));
Assert.assertTrue((A && B || C && D) == ((A && B) || (C && D)));
Assert.assertTrue((A && B && C || D) == (((A && B) && C) || D));
Assert.assertTrue((!A && B || C) == (((!A) && B) || C));
}
答案 2 :(得分:2)
布尔或按位?没有固定的规则,大多数语言都有类似的规则,但细节不同。在语言定义中查找。
答案 3 :(得分:1)
有三个基本的布尔运算符:NOT,AND,OR。 XOR只是A AND NOT B OR NOT A AND B
或(A OR NOT B) AND (NOT A OR B)
的简单版本。因此,只有这三个具有共同的优先权:NOT> AND>要么。 XOR在语言中具有不同的位置,但它的优先级肯定不高于AND且不低于OR。大多数语言(例如C / C ++ / Javascript等)都在AND和OR之间,但在其他语言(例如Perl)中,XOR具有与OR相同的优先级。
(或者只能使用AND和NOT表示,但它仍然是一个基本的运算符:A OR B = NOT(NOT A AND NOT B)
)
答案 4 :(得分:0)
证明 AND 比 OR 具有更高优先级的明显且简单的方法是比较带括号和不带括号的语句的结果:
std::cout << std::boolalpha;
std::cout << ( true || false && false ) << std::endl; // gives true
std::cout << ( ( true || false ) && false ) << std::endl; // gives false