Numpy 位运算符优先级?

2 投票
2 回答
1670 浏览
提问于 2025-04-17 09:33

numpy中的位运算符&和|的优先级是怎样的?

如果我写了

a & b | c

这个表达式会怎么计算呢?是 a & (b | c) 还是 (a & b) | c 呢?

那如果是

a | b & c

我还想知道,NOT (~) 的优先级是不是最高的?

2 个回答

8

请参考文档的这一部分,还有这一页(感谢@F.J.)。

运算优先级如下:

  1. 非运算 (~)
  2. 与运算 (&)
  3. 异或运算 (^)
  4. 或运算 (|)

这意味着:

a & b | c == (a & b) | c
a | b & c == a | (b & c)
9

这里有一个技巧,可以在你网络连接断开时使用。这个技巧适用于你可能遇到的很多问题。简单来说,这个技巧可以用一句话来形容,就是“试试看”。

>>> 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

撰写回答