TGINSIGHT CHAT
Python Заметки
@pythonotes
EducationИнтересные заметки и обучающие материалы по Python Контакт: @paulwinex ⚠️ Рекламу на канале не делаю!⚠️ Хештеги для поиска: #tricks #libs #pep #basic #regex #qt #django #2to3 #source #offtop
Неодамнешни објави
Ознака: #triсks · 1 објави
Објавено 4 мар.
Давайте разберёмся как работают побитовые операторы. Всего есть 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
Hashtags