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