2012-09-19 731 views
8

我想知道运算符在编程语言中的优先级取决于实现还是存在所有语言遵循的固定规则。如果可能的话,您可以先订购具有最高优先级的以下运营商:AND,OR,NOT,XOR。布尔运算符优先级

+0

我永远记得XOR的优先级,但是我用的所有语言具有相同的优先级为其他三个。 – Neil

回答

8

我使用Google搜索并找到了this,其中说APL和SmallTalk等语言没有运算符优先规则,它们严格评估表达式从左到右/从左到右。

然而,优先级的相对顺序,接着是NOT> XOR> AND> OR大多数语言,特别是那些由C

+1

根据[this](http://en.cppreference.com/w/c/language/operator_precedence),C的优先级是NOT> AND> XOR> OR,并且在XOR之前有AND。 JavaScript和Java也遵循这个顺序。 – mbomb007

2

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

+0

好的。发布时我脑子里有布尔运算符。感谢您提醒我按位运算符。 – Mika

0

有三个基本的布尔运算符:NOT,AND,OR。 XOR只是A AND NOT B OR NOT A AND B(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和不使用来表达,但它仍然是一个基本操作:A OR B = NOT(NOT A AND NOT B)

+0

有不同的优先顺序吗?我认为(在一个理想的世界中)布尔运算符应该具有相同的优先级和逻辑运算从左到右总是执行。有另一种方式有充分的理由吗? 'true xor false or true' should be true as true('(true xor false)or true'),not false('true xor(false or true)') – Junior

+0

Yes。原因与算术运算符非常相似。这是一个“不同的代数”(布尔代数)。 AND是一种乘法,OR是加法。有些地方比标准代数更重要(例如数字电路的构造)。 – FERcsI