- Побитовые операторы(bitwise) в Python
- 1. Побитовый оператор AND
- 2. Побитовый оператор OR
- 3. Примеры с XOR
- 4. Комплиментарный
- 5. Побитовый сдвиг влево
- 6. Побитовый сдвиг вправо
- Перегрузка побитового оператора Python
- Резюме
- ПОБИТОВЫЕ ОПЕРАТОРЫ В PYTHON (поразрядная конъюнкция и другие)
- Побитовое И (поразрядная конъюнкция)
- Побитовое ИЛИ (поразрядная дизъюнкция)
- Побитовое исключающее ИЛИ (XOR)
- Побитовое НЕ
- Побитовый сдвиг влево
- Побитовый сдвиг вправо
- What is XOR in Python?
- How to perform the bitwise XOR in Python?
- XOR ^ Operator between 2 integers
- Performing XOR on two booleans
- Swapping two integers using XOR without a temporary variable
- XOR in Python using Operator Module
- Learn more about bitwise operators
- Conclusion
- Арифметика и логика
- Логика
- Поразрядные операции
Побитовые операторы(bitwise) в Python
Операторы bitwise в Python используются для выполнения поразрядных вычислений целых чисел. Целые числа преобразуются в двоичный формат, а затем операции выполняются побитно, отсюда и название побитовые операторы.
Они работают только с целыми числами, а окончательный результат возвращается в десятичном формате и также называются бинарными операторами.
В Python существует 6 побитовых операторов. В таблице ниже приведены краткие сведения о них.
Побитовый оператор | Побитовый оператор AND | 10 7 = 2 |
| | Побитовый оператор OR | 10 | 7 = 15 |
^ | Побитовый оператор XOR | 10 ^ 7 = 13 |
~ | Побитовый оператор Ones’ Compliment | ~ 10 = -11 |
Побитовый оператор Left Shift | 10 | |
>> | Побитовый оператор Right Shift | 10 >> 1 = 5 |
Давайте рассмотрим этих операторов один за другим и разберемся, как они работают.
1. Побитовый оператор AND
Оператор AND в Python возвращает 1, если оба бита равны 1, в противном случае – 0.
2. Побитовый оператор OR
Побитовый оператор OR в Python возвращает 1, если какой-либо из битов равен 1. Если оба бита равны 0, он возвращает 0.
3. Примеры с XOR
Побитовый оператор XOR в Python возвращает 1, если один из битов равен 0, а другой бит равен 1. Если оба бита равны 0 или 1, он возвращает 0.
4. Комплиментарный
Дополнение числа «A» в Python Ones равно – (A + 1).
5. Побитовый сдвиг влево
Оператор Left Shift в Python сдвигает биты левого операнда в левую сторону заданное количество раз в правом операнде. Проще говоря, к двоичному числу в конце добавляются нули.
6. Побитовый сдвиг вправо
Оператор Right Shift в Python — это полная противоположность оператору сдвига влево. Затем биты левого операнда перемещаются вправо заданное количество раз.
Оператор побитового сдвига вправо в Python.
Перегрузка побитового оператора Python
Python поддерживает перегрузку операторов. Существуют различные методы, которые мы можем реализовать для поддержки побитовых операторов для наших настраиваемых объектов.
__and __ (я, другое) | |
| | __или __ (я, другое) |
^ | __xor __ (я, другой) |
~ | __invert __ (сам) |
__lshift __ (я, другой) | |
>> | __rshift __ (я, другой) |
Вот пример перегрузки побитового оператора для нашего настраиваемого объекта.
class Data: def __init__(self, i): self.id = i def __and__(self, other): print('Bitwise AND operator overloaded') if isinstance(other, Data): return Data(self.id other.id) else: raise ValueError('Argument must be object of Data') def __or__(self, other): print('Bitwise OR operator overloaded') if isinstance(other, Data): return Data(self.id | other.id) else: raise ValueError('Argument must be object of Data') def __xor__(self, other): print('Bitwise XOR operator overloaded') if isinstance(other, Data): return Data(self.id ^ other.id) else: raise ValueError('Argument must be object of Data') def __lshift__(self, other): print('Bitwise Left Shift operator overloaded') if isinstance(other, int): return Data(self.id > other) else: raise ValueError('Argument must be integer') def __invert__(self): print('Bitwise Ones Complement operator overloaded') return Data(~self.id) def __str__(self): return f'Data[]' d1 = Data(10) d2 = Data(7) print(f'd1d2 = ') print(f'd1|d2 =') print(f'd1^d2 = ') print(f'd1') print(f'd1>>2 = >2>') print(f'~d1 = ')
Bitwise AND operator overloaded d1d2 = Data[2] Bitwise OR operator overloaded d1|d2 = Data[15] Bitwise XOR operator overloaded d1^d2 = Data[13] Bitwise Left Shift operator overloaded d1>2 = Data[2] Bitwise Ones Complement operator overloaded ~d1 = Data[-11]
Резюме
Поразрядные операторы Python в основном используются в математических вычислениях. Мы можем реализовать определенные методы для поддержки побитовых операторов и для наших реализаций настраиваемых классов.
ПОБИТОВЫЕ ОПЕРАТОРЫ В PYTHON (поразрядная конъюнкция и другие)
Побитовые операторы работают с данными в битовом (двоичном) формате и действуют бит за битом.
Всего этих операторов шесть:
& | побитовое И (побитовое умножение, поразрядная конъюнкция) |
| | побитовое ИЛИ (побитовое сложение, поразрядная дизъюнкция) |
^ | побитовое исключающее ИЛИ (побитовая сумма по модулю два, XOR) |
~ | побитовое НЕ (побитовая инверсия, поразрядная инверсия) |
> | побитовый сдвиг вправо |
Битовые операции используются в криптографических алгоритмах, сетевых технологиях и др.
Побитовое И (поразрядная конъюнкция)
Число 10 в двоичной системе — 1010, а число 6 — 110.
После поразрядного перемножения получим 0010. В десятичной системе это 2.
Побитовое ИЛИ (поразрядная дизъюнкция)
Число 10 в двоичной системе — 1010, а число 6 — 110.
После поразрядного сложения получим 1110. В десятичной системе это 14.
Побитовое исключающее ИЛИ (XOR)
Принцип поразрядного исключающего ИЛИ
0 + 0 = 0 |
0 + 1 = 1 |
1 + 0 = 1 |
1 + 1 = 0 |
Пример с поразрядным исключающим ИЛИ:
Число 10 в двоичной системе — 1010, а число 6 — 110.
После поразрядного сложения по модулю два получим 1100. В десятичной системе это 12.
Побитовое НЕ
Положительные числа преобразуются в отрицательные со сдвигом на единицу, и наоборот.
Побитовый сдвиг влево
Позволяет сдвинуть битовое представление числа на несколько разрядов влево. Операции сдвига применяются только к целым числам.
Пример сдвига влево на 2 разряда:
Число 10 в двоичной системе — 1010.
После поразрядного сдвига влево на два разряда получим 101000 (справа добавится два разряда с нулями). В десятичной системе это 40.
Побитовый сдвиг вправо
Позволяет сдвинуть битовое представление числа на несколько разрядов вправо. Операции сдвига применяются только к целым числам.
Пример сдвига вправо на 2 разряда:
Число 10 в двоичной системе — 1010.
После поразрядного сдвига вправо на два разряда получим 10 (два правых разряда просто исчезнут). В десятичной системе это 2.
What is XOR in Python?
In Python, XOR is a bitwise operator that is also known as Exclusive OR.
It is a logical operator which outputs 1 1 1 when either of the operands is 1 1 1 (one is 1 1 1 and the other one is 0 0 0 ), but both are not 1 1 1 , and both are not 0 0 0 .
The symbol for XOR in Python is ‘^’ and in mathematics, its symbol is ‘⊕’.
The XOR operator is placed between two numbers or boolean values.
How to perform the bitwise XOR in Python?
In Python, we can perform the bitwise XOR operation using the «^» symbol. The XOR operation can be used for different purposes; XOR of two integers, XOR of two booleans, Swapping two numbers using XOR, etc.
We can also use the xor() function using the operator module in Python.
XOR ^ Operator between 2 integers
As XOR is a bitwise operator, it will compare bits of both the integers bit by bit after converting them into binary numbers.
Truth table for XOR (binary)
In the above example, we are finding the XOR of 1 5 15 1 5 and 3 2 32 3 2 , the result of which is 4 7 47 4 7 . The XOR operator first converted both the numbers in their binary form and then compared their bits bitwise.
To understand the working of XOR operation better, let us find the XOR of 15 and 32 by comparing their bits:
1 5 = 0 b 0 0 1 1 1 1 15 = 0b001111 1 5 = 0 b 0 0 1 1 1 1
3 2 = 0 b 1 0 0 0 0 0 32 = 0b100000 3 2 = 0 b 1 0 0 0 0 0
⟹ 1 5 ⊕ 3 2 = 0 b 0 0 1 1 1 1 ⊕ 0 b 1 0 0 0 0 0 \implies15 ⊕ 32 = 0b001111 ⊕ 0b100000 ⟹ 1 5 ⊕ 3 2 = 0 b 0 0 1 1 1 1 ⊕ 0 b 1 0 0 0 0 0
⟹ 1 5 ⊕ 3 2 = 0 b 1 0 1 1 1 1 \implies15 ⊕ 32 = 0b101111 ⟹ 1 5 ⊕ 3 2 = 0 b 1 0 1 1 1 1
The XOR of 1 5 15 1 5 and 3 2 32 3 2 is 0 b 1 0 1 1 1 1 0b101111 0 b 1 0 1 1 1 1 , i.e., 4 7 47 4 7 .
Performing XOR on two booleans
XOR results T r u e True T r u e when either of the operands are T r u e True T r u e (one is T r u e True T r u e and the other one is F a l s e False F a l s e ) but both are not T r u e True T r u e and both are not F a l s e False F a l s e .
Truth table for XOR (boolean)
In the above example, we are finding the XOR of the boolean values ( T r u e True T r u e and F a l s e False F a l s e ).
Swapping two integers using XOR without a temporary variable
The XOR swap algorithm can swap the values of two integers without the use of a temporary variable, which is normally required in other swapping algorithms.
In the above program, we are swapping two integers without using a temporary variable with the help of the XOR operator .
XOR in Python using Operator Module
We can also use the XOR operation using the xor() function in the operator module. The xor() function can perform XOR operations on integers and booleans.
The above example uses the operator.xor() function with booleans and integers.
Learn more about bitwise operators
The bitwise operators are used to perform bitwise calculations on integers. The integers are first converted into binary numbers, and then the operations are performed bit by bit. The result is always in decimal format.
They can also be used with boolean values.
To learn more about bitwise operators, click here.
Conclusion
- XOR is a bitwise operator that is short for Exclusive OR.
- It returns 1 1 1 when one and only one of the operands are 1 1 1 or T r u e True T r u e .
- XOR in Python is denoted using the «^» symbol.
- We can swap two integers without using a temporary variable with the help of the XOR operation.
- XOR operation can also be used with the help of the xor() function by importing the operator module.
Арифметика и логика
Всё более-менее стандартно по модулю одной особенности: неполное частное — результат округления соответствующей дроби вниз, а не к нулю (как принято в большинстве языков программирования). При этом всегда выполняется
Следует быть аккуратным со следующими операторами:
- с делением ( / ): его результат — число с плавающей точкой; арифметика с плавающей точкой на практике не пригодна ни для каких целей, кроме физического моделирования; любое другое использование арифметики с плавающей точкой требует высокой аккуратности и глубокого понимания её устройства
- с остатком ( % ): у него есть оператор-омоним, форматирующий текст; применяется этот самый форматирующий оператор, если левый операнд имеет текстовый тип
Логика
В качестве основных логических значений используются «истина» True и «ложь» False . К ним можно применять конъюнкцию ( & или and ), дизъюнкцию ( | или or ), сложение ^ и отрицание not .
Отдельно выделим and и or : они вычисляют свой правый операнд только если левый истинный (для and ) и ложный (для or ). Ложными считаются None , False , всевозможные нули и всевозможные пустые контейнеры.
Остальные объекты встроенных типов считаются истинными.
Также можно встретить двуинфиксный тернарный оператор . if . else . :
- первым делом он вычисляет свой второй операнд
- если он истинный, то вычисляется первый операнд
- в противном случае вычислятеся второй операнд
- A and B эквивалентно B if A else A
- not A эквивалентно False if A else True
- A or B эквивалентно B if not A else A
Поскольку это — единственный чисто тернарный оператор в языке, его так и называют «тернарным оператором».
Поразрядные операции
Сильно упрощают работу с цепочками бит, которые можно моделировать числами, двоичными записями которых эти цепочки являются.
Основные поразрядные операции в языке следующие:
- :& — поразрядная конъюнкция (результат состоит из тех и только тех двоичных разрядов, которые есть в обоих входных числах)
- 😐 — поразрядная дизъюнкция (результат состоит из тех и только тех двоичных разрядов, которые есть хотя бы в одном из входных чисел)
- :^ — поразрядный XOR (результат состоит из тех и только тех двоичных разрядов, которые есть ровно в одном из двух входных чисел)
- :
- :>> — сдвиг вправо (с уничтожением младших разрядов)
Рекомендуется их применять лишь к целым неотрицательным числам.