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
потому что оба являются одинаковыми целыми числами.