【问题标题】:Numpy bitwise operator priority?Numpy按位运算符优先级?
【发布时间】:2012-01-04 20:46:59
【问题描述】:

numpy按位运算符&和|的优先级是多少?

如果我这样做了

a & b | c

它评估什么表达式? a & (b | c) ? (a & b) | c ?

怎么样

a | b & c

我还假设 NOT (~) 具有最高优先级?

【问题讨论】:

    标签: python numpy operators bitwise-operators operator-precedence


    【解决方案1】:

    当您的互联网连接中断时,您可以使用以下技术。它适用于您可能遇到的许多问题。该技术的通俗描述是“吸一口,看看”。

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

    【讨论】:

    • 我绝对喜欢这种尝试和观察的方法。一个小问题是,如果第一条语句为真,则两个运算符仍然可以具有相同的优先级,因此最好也检查一下反转的运算符(a | b & c) == ((a | b) & c)。因为这是错误的,所以您知道 & 的优先级高于 |,但对于具有相同优先级的运算符,如 +- 来说,这是正确的。
    • 好招! @AndrewClark 正如您所说,仅第一个输出并不意味着&先于|。我认为我们必须使用这两个语句的输出来推断 & 优先于 |。否则,您切换运算符的方法将很有用。
    【解决方案2】:

    请参阅 this section of the documentationthis page(感谢 @F.J.)。

    优先级是:

    1. 不是 (~)
    2. 和 (&)
    3. 异或 (^)
    4. 或 (|)

    这意味着:

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

    【讨论】:

    • 根据this^ 的优先级高于|。易于证明,1 | 2 ^ 3 != (1 | 2) ^ 3
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 2011-06-21
    • 2013-02-24
    • 2012-08-10
    相关资源
    最近更新 更多