Logi c позади не получает вывод при использовании побитового AND вместо оператора AND - PullRequest
0 голосов
/ 05 апреля 2020

Можете ли вы дать ясность в Python

i = 2
if i<3 and i>1:
   print('its ok')

Вывод: "все в порядке" ------> здесь нет проблем

Но когда я собираюсь чтобы использовать побитовое И вместо И, код был выполнен, но ничего в выводе.

i = 2
if i<3 & i>1:
   print('its ok')

Вывод: ничего ------> почему ??

Ответы [ 3 ]

2 голосов
/ 05 апреля 2020

Вы пытаетесь использовать побитовое И (&) для выполнения логической операции И (&&)!

Это должно быть

if i<3 && i>1:
    print('its ok')
0 голосов
/ 05 апреля 2020

i<3 & 1>1 читается как i<(3 & i)>1. & является побитовым оператором AND.

Таким образом, это оценивается как i<(3 & 2)>1, что равно i<2>1.
i (= 2) не меньше 2, поэтому первый условие False. Следовательно, условие не выполняется.

0 голосов
/ 05 апреля 2020

Битовые операции над числами, но они обрабатывают их, как если бы они были строкой битов, записанных в двоичном формате.

a & b

Оператор & возвращает 1, когда соответствующие биты a и b равны 1. В противном случае возвращается 0.

Если вы используете оператор && логический , он будет работать так, как вы хотите:

i = 2

if i < 3 && i > 1: 
    print('Works!')
...