Pular para o conteúdo

Operadores

Aritméticos

OperadorDescrição
+Adição
Subtração
*Multiplicação
/Divisão
%Módulo (resto da divisão)
**Exponenciação
//Piso da divisão

O programa abaixo mostra as operações aritméticas para duas variáveis.

x = 9
y = 2
print('x + y = ', x + y)
print('x - y = ', x - y)
print('x * y = ', x * y)
print('x / y = ', x / y)
print('x % y = ', x % y)
print('x ** y = ', x ** y)
print('x // y = ', x // y)

O resultado é

x + y = 11
x - y = 7
x * y = 18
x / y = 4.5
x % y = 1
x ** y = 81
x // y = 4

Atribuição

Operador Descrição
=Atribuir um valor à variável
+=Adicionar um valor à variável
-=Subtrair um valor da variável
*=Multiplicar a variável por um valor
/=Dividir a variável por um valor
%=Atribuir à variável o resto da divisão da variável por um valor
//=Atribuir à variável o piso da divisão da variável por um valor
**=Elevar o valor da variável a potência de um número
&=Fazer AND, bit a bit, da variável com um valor
|=Fazer OR, bit a bit, da variável com um valor
^=Fazer XOR, bit a bit, da variável com um valor
>>=Fazer deslocamento, à direita, de determinada quantidade de bits do valor da variável
<<=Fazer deslocamento, à esquerda, de determinada quantidade de bits do valor da variável

Considere x = 7 e y = 3. As operações para essas duas variáveis são mostradas abaixo.

  • x \; += \; y \rightarrow x = 7 + 3 \rightarrow x= 10
  • x \; -= \; y \rightarrow x = 7 - 3 \rightarrow x = 4
  • x \; *= \; y \rightarrow x = 7 * 3 \rightarrow x = 21
  • x \; /= \; y \rightarrow x = 7 / 3 \rightarrow x = 2.3335
  • x \; \%= \;y \rightarrow x = 7 \% 3 \rightarrow x = 1 (o resto da divisão de 7 por 3 é 1)
  • x \; //= \; y \rightarrow x = 7 // 3 \rightarrow x = 2 ( a divisão de 7 por 3 é 2.3335, o menor inteiro é então 2)
  • x \; **= \; y \rightarrow x = 7^3 \rightarrow x = 343
  • x \; \&= \; y \rightarrow x = 3 (Obs:7_{10} = 111_2 e 3_{10} = 011_2, então (111 AND 011 = 011)_2 que corresponde a 3 na base decimal)
  • x \; |= \; y \rightarrow x = 7 (Obs: 7_{10} = 111_2 e 3_{10} = 011_2, então (111 OR 011 = 111)_2 que corresponde a 7 na base decimal)
  • x \; \wedge= \; y \rightarrow x = 4 (Obs: 7_{10} = 111_2 e 3_{10} = 011_2, então (111 XOR 011 = 100)_2 que corresponde a 4 na base decimal)
  • x \; >>= \; y \rightarrow x = 0 (Obs: 7_{10} = 111_2, ao fazer 3 deslocamentos de bits à direita temos 000_2 que corresponde a zero na base decimal)
  • x \; <<= \; y \rightarrow x = 56 (Obs: 7_{10} = 111_2, ao fazer 3 deslocamentos de bits à esquerda temos 111000_2 que corresponde a 56 na base decimal)

Comparação

OperadorDescrição
==É igual
!=Não é igual
>Maior que
<Menor que
>=Maior que ou igual a
<=Menor que ou igual a

Abaixo um exemplo do uso dos operadores de comparação.

x = 5
y = 2
if (x == y):
   print('x == y')
if (x != y):
   print('x != y')
if (x > y):
   print('x > y')
if (x < y): print('x < y') if (x > y):
   print('x >= y')
if (x < y):
   print('x <= y')

A resposta da execução do programa é

x != y
x > y
x >= y

Lógicos

OperadorDescrição
andRetorna True se as duas afirmações são verdadeiras
orRetorna True se pelo menos uma das afirmações é verdadeira
notRetorna True se a afirmação for falsa e retorna False se a afirmação for verdadeira

Abaixo um exemplo do uso dos operadores lógicos.

if (True and True):
   print('True and True')
if (True and False):
   print('True and False')
if (True or True):
   print('True or True')
if (True or False):
   print('True or False')
if (not True):
   print('not True')
if (not False):
   print('not False')
if (2 < 5):
   print('2 < 5')
if (2 < 5 and -1 < 0):
   print('2 < 5 and -1 < 0')
if (not 0):
   print('not 0')
if (not 1):
   print('not 1')

A resposta do programa é mostrada a seguir.

True and True
True or True
True or False
not False
2 < 5
2 < 5 and -1 < 0
not 0

Identidade

OperadorDescrição
isRetorna True se as variáveis forem um mesmo objeto
is notRetorna True se as duas variáveis não forem o mesmo objeto

O primeiro exemplo abaixo verifica se as variáveis x, y e z são um mesmo objeto.

x = 2.86
y = 2.86
z = x
if (x is y):
   print('x is y')
if (x is z):
   print('x is z')
if (y is z):
   print('y is z')
print('id(x) = ', id(x), ', id(y) = ', id(y), ', id(z) = ', id(z))

A execução do programa mostra que as três variáveis são um mesmo objeto e que, assim, possuem a mesma identificação.

x is y
x is z
y is z
id(x) = 139633187004968 , id(y) = 139633187004968 , id(z) = 139633187004968

O segundo exemplo verifica se duas variáveis com listas são o mesmo objeto.

x = [1,2,3]
y = [1,2,3]
if (x is y):
   print('x is y')
if (x is not y):
   print('x is not y')
if (x == y):
   print('x == y')
print('id(x) = ', id(x), ', id(y) = ', id(y))

O resultado do programa mostra que x e y não são o mesmo objeto (possui diferentes identificadores), mas possuem o mesmo conteúdo.

x is not y
x == y
id(x) = 140101529295176 , id(y) = 140101529295240

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}