Всего есть 6 основных операторов:
| OR
& AND
^ XOR (исключающее OR)
~ NOT (унарная операция)
>> сдвиг вправо
<< сдвиг влево
Эти операторы работают с числами в двоичном представлении. Условно говоря, они ставят числа в двоичном виде друг над другом и по очереди обрабатывают каждый столбик с битами.Например, берём два числа, и сразу смотрим как оно выглядит в двоичном виде (Python отбрасывает ведущие нули, так что рядом допишу более удобную форму)
>>> a = 3
>>> bin(a)
'0b11' # 011
>>> b = 6
>>> bin(b)
'0b110' # 110
🔸 Оператор ORв результат пишет 1 если в одном из элементов есть 1
>>> 3|6
7
в двоичном виде это выглядит так (запишем столбиком) 011
|110
=111
В каждом столбце был найден 1, поэтому в результате все биты равны 1 🔸 Оператор AND
В результат ставит 1 только если оба бита равны 1
>>> 3&6
2
Бинарный вид 011
&110
=010
Только на 2й позиции оба бита равны 1.🔸 Оператор XOR
Пишет 1 на бит результата, для которого только один из соответствующих битов операндов равен 1.
>>> 3^6
5
011
&110
=101
🔸 Оператор NOTЗаменяет каждый бит на противоположный. Эта операция унарная, то есть поддерживает только один операнд.
>>> ~3
-4
~011
=100
Здесь всё понятно. Но давайте попробуем другое число:~50
=-51
~110010
=-110011
Вот тут не очень понятно что произошло) Это связано со способом представления отрицательных чисел в двоичном виде. Ведь мы не можем в память записать отрицательные биты. Для этого используется ведущий 0 или 1.Но это тема не поместится в пост, советую поискать информацию в интернете самостоятельно). Если кратко и из документации, то:
Побитовая операция НЕ для числа x соответствует -(x+1)
🔸 СдвигЗдесь всё просто. Все биты сдвигаются на указанное количество шагов подставляя нули
>>> 3 << 1
6
011 << 1
110
Кстати, преобразовать бинарное представление обратно в число можно с помощью функции int() указав разрядность системы исчисления.>>> int('11001', 2)
25
__________________А зачем нам вся эта информация?
Узнаем в следующем посте...
#triсks