Приоритет битового оператора - PullRequest
1 голос
/ 05 января 2012

Какова приоритетная приоритетность битовых операторов & и | ?

если я сделаю

a & b | c

какое выражение оно оценивает? a & (b | c)? (a & b) | c?

Как насчет

a | b & c

Я также предполагаю, что НЕ (~) имеет самый высокий приоритет?

Ответы [ 2 ]

9 голосов
/ 05 января 2012

Вот техника, которую вы можете использовать, когда ваше интернет-соединение не работает.Это применимо ко многим вопросам, которые могут у вас возникнуть.Разговорное описание техники "Соси и смотри".

>>> 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
7 голосов
/ 05 января 2012

См. этот раздел документации , а также эту страницу (спасибо @FJ).

Приоритет:

  1. не (~)
  2. и (&)
  3. xor (^)
  4. или (|)

Это означает, что:

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