Python: Operadores Bitwise com exemplos

Introdução

Os operadores bitwise, realizam uma operação binária entre os bits de seus operadores.

Relembrando as operações binárias, cada caracter é representado digitalmente por uma sequência de bits. Os quais possuem valores inteiros para processamento digital.

posição |  8  |  7  | 6 | 5 | 4 | 3 | 2 | 1 | 0
valor     |256|128|64|32|16| 8 | 4 | 2 | 1

Os valores inteiros apresentados na tabela acima, sempre progridem exponencialmente na base 2, conforme sua posição. Onde 2**0=1(dois elevado a zero é igual a um); 2**1=2; 2**8=256; 2**9=512; e assim sucessivamente.

Para determinar um valor inteiro em binário, basta ativar o bit correspondente na posição indicada, somando seus respectivos valores em inteiro.
 0 =  0000 0000
 1 =  0000 0001
 2 =  0000 0010
 7 =  0000 0111
64 = 0010 0000
65 = 0010 0001

Vamos assumir os seguintes valores aos exempos:
a = 12 #('0b01100')
b = 25 #('0b11001')

And binário (&)

Este operador de forma equivalente aos operadores lógicos, mantem ativo somente se nos dois operandos estiverem ativos.

c = a & b

a = 12 #('0b01100')
b = 25 #('0b11001')
c =   8 #('0b01000')


Or binário (|)

Este operador mantem ativo somente se um dos dois operandos estiverem ativos.

c = a | b

a = 12 #('0b01100')
b = 25 #('0b11001')
c = 29 #('0b11101')

XOR binário (^)

Este operador mantem ativo somente se ativo em qualquer um dos operandos.

c = a ^ b

a = 12 #('0b01100')
b = 25 #('0b11001')
c = 21 #('0b10101')


Complemento binário (~)

Este operador é unário, e tem efeito de inverter os bits.

c = ~a 

a =  12 #(' 0b01100')
c = -13 #('-0b01101')


Left shift (<<)

Este operador é unário, e desloca os bits para esquerda na quantidade de casas indicadas.

c = a  << 2

a = 12 #(0b001100)
c = 48 #(0b110000)

c = b  << 1

b = 25 #(0b011001)
c = 50 #(0b110010)


Right shift (>>)

Este operador é unário, e desloca os bits para direita na quantidade de casas indicadas.

c = a  >> 2

a = 12 #(0b001100)
c =   3 #(0b000011)

c = b  >> 1

b = 25 #(0b011001)
c = 12 #(0b001100)

Desfecho
Matematicamente estes operadores podem ser utilizados para realizar operações aritméticas de forma rápida e com menos custo operacional.

Comentários