2012-09-19 126 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