1

numpy按位運算符的優先順序是什麼&和| ?Numpy按位運算符優先級?

,如果我做

a & b | c 

它評價是什麼表情? a & (b | c)(a & b) | c

如何

a | b & c 

我還假設NOT(〜)具有最高的優先級?

回答

8

這是您可以在互聯網連接斷開時使用的技術。它適用於你可能有的許多問題。該技術的口語化描述是「吸引並看到」。

>>> from itertools import product 
>>> list(product(range(2), repeat=3)) 
[(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1)] 
>>> all((a & b | c) == ((a & b) | c) for a, b, c in product(range(2), repeat=3)) 
True 
>>> all((a & b | c) == (a & (b | c)) for a, b, c in product(range(2), repeat=3)) 
False 
+1

+1表示人們經常忽視的方法。 – prelic 2012-01-04 21:09:24

+1

我絕對喜歡嘗試看看的方法。一個小小的挑剔是,如果第一個語句是真的,那麼兩個操作符仍然可以具有相同的優先級,所以最好還是與運算符反轉'(a | b&c)==((a | b)& C)'。既然這是錯誤的,你知道'&'比'|'具有更高的優先級,但對於像'+'和'-'這樣具有相同優先級的運算符來說也是如此。 – 2012-01-04 21:18:56

7

參照this section of the documentation,還有this page(謝謝@ F.J。)。

優先權是:

  1. 不(~
  2. 和(&
  3. XOR(^
  4. 或(|

這意味着:

a & b | c == (a & b) | c 
a | b & c == a | (b & c) 
+1

根據[this](http://docs.python.org/reference/expressions.html#summary),'^'的優先級高於'|'。容易證明,'1 | 2^3!=(1 | 2)^ 3'。 – 2012-01-04 21:08:07

+0

好的。我做了編輯。 – Benjamin 2012-01-04 21:09:33