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