Python: побитовое ИЛИ между целыми числами

Я вижу странное поведение в Python при выполнении побитовых операций

>>> bin(4)
'0b100'
>>> bin(9)
'0b1001'
>>> bin(9^4)
'0b1101'

Выше я вижу ожидаемое поведение для ИЛИ, числа выровнены справа, и каждый бит - ИЛИ, генерирующий результат. Однако, когда я ИЛИ два одинаковых целых числа, результатом всегда будет 0, когда это должно быть число, по моему мнению.

>>> bin(9^9)
'0b0'

Это ошибка или очень странная особенность? Кто-нибудь может объяснить?

2 ответа

Вы подаете заявку на эксклюзив или (^). Вы пытаетесь применить обычный побитовый или (|).

Из Python Wiki:

х | Y

Делает "побитовый или".
Каждый бит на выходе равен 0, если соответствующий бит x и y равен 0, в противном случае это 1.

х ^ у

Делает "битовый исключающий или".
Каждый бит на выходе совпадает с соответствующим битом в x, если этот бит в y равен 0, и является дополнением к биту в x, если этот бит в y равен 1.

^ является побитовым исключением или ( AKA. XOR)

не "ИЛИ"


Это таблица правды для эксклюзивных или

исключающее

источник

Таким образом, вы получаете 0, потому что XOR будет выводить 0, когда биты идентичны / одинаковы.

В твоем случае

9^9 или же 9 XOR 9 дам тебе 0 потому что оба являются одинаковыми целыми числами.

Другие вопросы по тегам