2013-10-30 44 views
2

根據wikipedia,按位AND運算符的優先級高於按位OR。但是鎢狼說他們是相同的。以下兩個表達式是否相同?按位運算符優先順序

C & A | B 
C & (A | B) 

我的想法是,他們是相同的,因爲我相信|和&具有相同的優先級,所以我們只是從左到右進行評估。

+0

操作的順序將取決於語言。我將['c AND a OR b'](http://www.wolframalpha.com/input/?i=truth+table+c+and+a+or+b)插入Wolfram Alpha,它給了我'( c和a)或b'。另外['c OR a AND b'](http://www.wolframalpha.com/input/?i=truth+table+c+or+a+and+b)給了我'c OR(a AND b) '因此看起來像在Wolfram Alpha中'AND'具有比'OR'更高的優先級。這些是邏輯運算符而不是按位,但我認爲他們會遵循相同的模式。 – NullUserException

+0

@NullUserException我認爲這種間接引發了一個可能有趣的地方:在C和C++中,邏輯操作總是明確地從左到右評估,只要結果是已知的,評估就會結束(所以在&&右側沒有評估如果左側評估爲零;在任何「||」中,如果左側評估爲非零,則不評估右側)。按位運算符優先,並且沒有關於避免評估子表達式的特殊規則。 – Tommy

+1

你可以看到&,^和|作爲分別乘法,加法和最大值的逐位版本。這種理由證明了他們使用最廣泛的優先順序。 – harold

回答

3

從理論上講,任何語言或邏輯系統都可以規定其運營商的優先級。然而,在我熟悉的所有語言中,按位(並且對於該事情是合乎邏輯的)AND具有比OR更高的優先級。

鑑於&和|是基本的運營商,並且至關重要的是(a)& b) c = d並不意味着&(b | c)= d,任何真正的語言都不會使其相對優先級不確定。

2

我不認爲它們有自然的優先權,不同的是,乘法和除法的優先級比減法和​​加法優先,因爲它們可以從減法和加法中構建。

In C & has higher precedence than |所以你的兩個陳述是不相等的。我猜想大多數C語言的語言都會從中繼承。

0

如果你給Wolfram Alpha'|'和'&',它會將其轉換爲BitAnd(x,y)和BitOr(x,y)等按位函數。二元運算符的表達式是模糊的,但它變成了不含糊的函數。

例如:1 & 2 | 3將變成BitOr[BitAnd[1,2],3],並且只有一種方法來評估這些函數。正如以上評論者所指出的,Alpha將&置於上方優先。

鏈接:http://www.wolframalpha.com/input/?i=1+%26+2+%7C+3

有趣的是,翻譯二元運算此功能 '|'和'&'似乎是無證,因爲它沒有出現在任何標準的Wolfram指南中。

Ref1至:https://reference.wolfram.com/language/tutorial/OperatorInputForms.html

至Ref2:http://reference.wolfram.com/language/guide/BitwiseOperations.html

用於從其他語言按位運算符的一些例子,高 - >低

  • 的Python:與,異或,或
  • C++:與,xor或
  • Golang:and,xor == or(left associative)
  • 帕斯卡:和,或
  • 夫特:與,異或==或(左結合)
  • 達特:與,異或,或
  • 使用Javascript:與,異或,或

參考文獻: