Operadores
Aritméticos
Operador | Descriçã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
Operador | Descriçã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
Operador | Descrição |
and | Retorna True se as duas afirmações são verdadeiras |
or | Retorna True se pelo menos uma das afirmações é verdadeira |
not | Retorna 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
Operador | Descrição |
is | Retorna True se as variáveis forem um mesmo objeto |
is not | Retorna 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
Operador | Descriçã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}