Давайте разберёмся как работают побитовые операторы.
Всего есть 6 основных операторов:
Например, берём два числа, и сразу смотрим как оно выглядит в двоичном виде (Python отбрасывает ведущие нули, так что рядом допишу более удобную форму)
в результат пишет 1 если в одном из элементов есть 1
🔸 Оператор AND
В результат ставит 1 только если оба бита равны 1
🔸 Оператор XOR
Пишет 1 на бит результата, для которого только один из соответствующих битов операндов равен 1.
Заменяет каждый бит на противоположный. Эта операция унарная, то есть поддерживает только один операнд.
Но это тема не поместится в пост, советую поискать информацию в интернете самостоятельно). Если кратко и из документации, то:
Здесь всё просто. Все биты сдвигаются на указанное количество шагов подставляя нули
А зачем нам вся эта информация?
Узнаем в следующем посте...
#triсks
Всего есть 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