Pular para o conteúdo

Operadores bit-a-bit

OperadorDescrição
&O resultado é 1 somente se os dois bits sendo comparados são 1 (operação AND)
|O resultado é 1 se pelo menos um dos bits sendo comparados é 1 (operação OR)
^O resultado é 1 se os bits sendo comparados possuem valores diferentes (operação XOR)
~Inverte os valores dos bits (operação NOT)
<<Deslocamento dos bits para a esquerda
>>Deslocamento dos bits para a direita

Vejamos um exemplo que usa os operadores bit a bit.

x = 5
y = 14
print('x & y =', x & y)
print('x | y =', x | y)
print('~x =', ~x, ', ~y =', ~y)
print('x<<2 =', x<<2, ', y<<2 =', y<<2) 
print('x>>2 =', x>>2, ', y>>2 =', y>>2)

O resultado do programa é mostrado abaixo.

x & y = 4
x | y = 15
~x = -6 , ~y = -15
x<<2 = 20 , y<<2 = 56 
x>>2 = 1 , y>>2 = 3

Para entender o funcionamento dos operadores bit-a-bit é preciso primeiro converter os valores para a base binária. Vamos considerar operações com 8 bits (é possível definir 256 diferentes números). Então 5_{10} = 00000101_2 e 14_{10} = 00001110_2.

  • x \; \& \; y = 00000101_2 \; \& \; 00001110_2 = 00000100_2 = 4_{10}
  • x \; | \; y = 00000101_2 \; | \; 00001110_2 = 00001111_2 = 15_{10}
  • \sim x = 11111010_2 = (250-256)_{10} = -6_{10}
  • \sim y = 11110001_2 = (241-256)_{10} = -15_{10}
  • x << 2 = 00010100_2 = 20_{10}
  • y<< 2 = 00111000_2 = 56_{10}
  • x >> 2 = 00000001_2 = 1_{10}
  • y >> 2 = 00000011_2 = 3_{10}