Автор оригинала: Robin Andrews.
Побитовые операторы И битовые манипуляции подобны рекурсии в том, что они оба тема, которые являются фундаментальными для вычислений, но объем использования вы сделаете из них, будут варьироваться в зависимости от вашего домена. Битовые манипуляции, безусловно, важно для занятий собеседованиям в компаниях, таких как «Bign» (Google, FB и т. Д.), а также другие места, где ожидается глубокое знание основных знаний и требуется. Это также очень важно при работе со встраиваемыми системами и некоторые другие области, как показано ниже.
Применения побитовых операторов в вычислениях
- Управления собеседования и постоянная работа для больших технологий
- Встроенные системы программирования
- Алгоритмы шифрования и сжатия
- Культурное осведомленность в технологическом возрасте
- Низкоуровневое программирование
- Работа с графикой
- Драйверы устройств для основных операционных систем
- Коммуникационный протокол пакетной сборки
Знание побитовых операторов также важна с точки зрения культурного образования в информационном возрасте. Технология, которая использует эти процессы, окружает нас в нашей повседневной жизни, и имеет смысл иметь некоторое понимание человеческих знаний, которые подкрепляют их существование.
Некоторые из наиболее часто используемых побитовых операторов:
- & (побитовые и)
- |. (побил или)
- ~ (побитовое не)
- ^ (побитовые хор)
- << (побитовая левая смена)
- >> (побитовый правый сдвиг)
Вы можете играть с этими операторами в Python Shell , Какой отличный способ получить быструю ощущение того, как работает какой-то функционал Python Python или быстро проверяет, что она ведет себя как ожидалось.
Например:
>>> 16 >> 1 # Divide by 2 8 >>> 12 << 2 # Multiply by 4 48 >>> 11 & 1 # A trick to check for even/odd 1 >>>
Эти операторы сделают гораздо больше смысла, если вы посмотрите на Двоичное представление операндов. Я предоставил какой-то код ниже, что вы можете найти полезным в своем исследовании. Имейте в виду форматирование, которое я использовал только для положительных значений.
# A couple of useful functions
print(int('00100001', 2)) # Convert binary number in string form to decimal int
print(bin(20)) # String representation of binary number
# Python Bitwise Operator Examples
# NB the output is designed to work for positive values only!
a = 24
b = 9
c = a & b # Bitwise AND
print(f"{a} & {b} = {c}")
print()
print(f" {bin(a)[2:].zfill(8)}")
print(f"& {bin(b)[2:].zfill(8)}")
print("----------")
print(f"= {bin(c)[2:].zfill(8)}")
print()
c = a | b # Bitwise OR
print(f"{a} | {b} = {c}")
print()
print(f" {bin(a)[2:].zfill(8)}")
print(f"| {bin(b)[2:].zfill(8)}")
print("----------")
print(f"= {bin(c)[2:].zfill(8)}")
print()
c = a ^ b # Bitwise XOR
print(f"{a} ^ {b} = {c}")
print()
print(f" {bin(a)[2:].zfill(8)}")
print(f"^ {bin(b)[2:].zfill(8)}")
print("----------")
print(f"= {bin(c)[2:].zfill(8)}")
print()
b = 2
c = a >> b # Right-shift by 2. I.e a // 4
print(f"{a} >> {b} = {c}")
print()
print(f" {bin(a)[2:].zfill(8)}")
print(f">> {b} {bin(b)[2:].zfill(8)}")
print("--------------")
print(f"= {bin(c)[2:].zfill(8)}")
print()
b = 2
c = a << b # Left-shift by 2. I.e a * 4
print(f"{a} << {b} = {c}")
print()
print(f" {bin(a)[2:].zfill(8)}")
print(f"<< {b} {bin(b)[2:].zfill(8)}")
print("--------------")
print(f"= {bin(c)[2:].zfill(8)}")
print()
Основная часть кода даст следующий выход:
24 & 9 = 8
00011000
& 00001001
----------
= 00001000
24 | 9 = 25
00011000
| 00001001
----------
= 00011001
24 ^ 9 = 17
00011000
^ 00001001
----------
= 00010001
24 >> 2 = 6
00011000
>> 2 00000010
--------------
= 00000110
24 << 2 = 96
00011000
<< 2 00000010
--------------
= 01100000
Вы можете конечно изменять значения А и B выполнять разные расчеты.
Программа Python с использованием побитовых операторов
Следующая программа использует Python BiteWise операторы для сбора полномочий 2 Это можно использовать для представления десятичного числа, предусмотренного в качестве аргументов. Посмотрите, можете ли вы понять, как это работает, особенно & и << побитовые операторы. Добавьте операторы печати на выходные промежуточные значения, если он поможет вам увидеть, что происходит на определенном шаге.
def binary_decomp(n):
powers = []
i = 1
while i <= n:
if i & n:
powers.append(i)
i <<= 1
return powers
print(binary_decomp(10))
print(binary_decomp(32))
print(binary_decomp(127))
print(binary_decomp(-24))
print(binary_decomp(0))
Выход:
[2, 8] [32] [1, 2, 4, 8, 16, 32, 64] [] [] >>>
Теперь вы знаете о битовых операторах – Python. Я надеюсь, что эти знания вам хорошо служат. Счастливые вычисления!