python побитовая операция ИЛИ - PullRequest
0 голосов
/ 26 апреля 2020

in python

результат 1000 or 10001 равен 1000

результат 11 or 1000 or 10001 или 11

Как я могу получить 10001 для 1000 or 10001 и 11001 для 11 or 1000 or 10001?

Ответы [ 2 ]

1 голос
/ 26 апреля 2020

В python вы можете выполнять логические операции (или, и, не, et c) над int.

Чтобы преобразовать строку двоичного числа в int, вы можете сделать это,

int('11', 2)

Затем двоичное число 11 будет преобразовано в основание 2 int. Следовательно, вы получите 3.

Возвращаясь к вашей проблеме,

Вам необходимо предварительно выполнить: 1000 or 10001

Для этого сначала преобразуйте эти двоичные числа в int и применять логический или оператор над этими числами. Это будет выглядеть следующим образом:

bin(int('1000', 2) | int('10001', 2)) # '0b11001'

0b в приведенном выше результате означает, что это двоичная строка.

Аналогично для 11 or 1000 or 10001,

bin(int('11', 2) | int('1000', 2) | int('10001', 2)) # 0b11011

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

Python работает так же, как и ожидалось.

>>> bin(0b1000 | 0b10001)
'0b11001'
>>> bin(0b11 | 0b1000 | 0b10001)
'0b11011'

Но выражение

>>> 1000 or 10001
1000

совершенно другое. Это смотрит на два целых числа, и потому что первое равно True (не 0), оно возвращается. Если бы это было не так, возвращалось бы целочисленное значение после оператора или. Эта функция очень удобна; в python вы можете сказать так:

>>> myvalue =["Hello world"]
>>> myvalue and myvalue[0] or "Empty list"
'Hello world'
>>> myvalue = []
>>> myvalue and myvalue[0] or "Empty list"
'Empty list'

, поскольку пустой список равен False в этой операции.

...