Operações bit-a-bit (bitwise) em Python

Alex Barros
4 min readMay 10, 2021

--

Aprenda a utilizá-las em Python e alguns exemplos.

Todas as linguagens possuem operadores binários e como nós estamos mais acostumados com os números decimais e suas operações, costumamos ter dificuldade em entender como essas operações binárias funcionam.

Além disso, há sempre o risco de programadores iniciantes confundirem os operadores & e | com o AND e o OR, respectivamente. Tenha atenção a sintaxe para esses símbolos a depender da linguagem que está utilizando.

Como funcionam?

Basicamente esses operadores (<<, >>, &, |, ~, e ^) são utilizados para trabalharmos com números, mas consideram que os números são um conjunto de strings de zeros e uns. Exceto pelos números negativos, com um pouco de atenção conseguimos converter um número para uma string de zeros e uns sem grandes dificuldades:

  • 0 = “0”
  • 1 = “1”
  • 2 = “10”
  • 3 = “11”
  • 4 = “100”
  • 5 = “101”
  • 1029 é “10000000101” == 2**10 + 2**2 + 2**0 == 1024 + 4 + 1

Os operadores:

x << y

Retorna x com os bits deslocados para a esquerda em y posições. Os novos bits do lado direito são preenchidos com zeros. É o mesmo que multiplicar o x por 2 elevado a y. Deslocar um único bit a esquerda é o equivalente a dobrar o seu valor. Por exemplo a string '10' representa 2 em decimal, deslocando para a esquerda, '100' representa 4 em decimal.

x >> y

Retorna x com os bits deslocados para a direita por y posições. É o mesmo que dividir o x por 2 elevado a y, ou seja, [x/(2ˆy)]. De forma oposta ao outro operador, ao deslocarmos um bit para a direita, o valor da string é dividido por 2.

x & y

Faz um and bit-a-bit. Cada bit de saída é 1 se o bit correspondente do x AND y também seja 1, caso contrário é 0. O operador (&) aplica uma conjunção lógica (intersecção) nos bits correspondentes dos operadores. Só retorna um quando os dois pares são 1, vejam o exemplo abaixo:

x | y

Faz um OU bit-a-bit. Cada bit de saída é zero se o bit correspondente da operação x AND y for zero, caso contrário é 1. O operador (|) é responsável por uma união entre os conjuntos de bits. Somente a combinação de dois zeros resultará em zero no output final. Vejam o exemplo visual:

~ x

Retorna o complemento de 1 de x, ou seja, soma-se 1 ao número e inverte-se o sinal. Esse é o funcionamento padrão em Python, pois todos os números possuem o sinal de positivo ou negativo implícito. Quando trabalhos com números sem o sinal, o complemento traria como resposta a inversão de cada um dos bits do número binário. Os 1s se tornariam 0s e os 0s se tornariam 1s.

x ^ y

Faz um OU Exclusivo bit-a-bit. Cada bit da saída é o mesmo do correspondente de x caso o bit em y seja 0 e o complemento do bit em x se o bit em y for 1. Ou seja, ocorre a avaliação de duas condições mutualmente exclusivas. Imagine que uma pessoa pode ser considerada adulto ou criança, mas não os dois ao mesmo tempo. Para o resultado ser 1, cada par deve conter valores opostos.

Alguns outros exemplos:

Nos acompanhe em @aprendadatascience para mais conteúdo de Python e Data Science.

Outras Referências em inglês:

--

--

Alex Barros
Alex Barros

Written by Alex Barros

Engenheiro da Computação. Mestre e Doutorando em Computação Aplicada. Coordenador do Escritório de Projetos e Processos no TRT8.

No responses yet