Operadores são símbolos que executam uma manipulação matemática ou lógica especifica.
A linguagem C# tem um rico conjunto internos de operadores e disponibiliza os seguintes tipos de operadores.
- Aritméticos
- Relacionais
- Lógicos
- Bit a bit
- Atribuição
- Outros
Operadores Aritméticos
Os operadores aritméticos executam operações matemáticas.
Considere que a variável A contém o valor 10 e a variável B contém 20.
Operador | Descrição | Exemplo |
+ | Adição | A + B = 30 |
– | Subtração | A – B = -10 |
* | Multiplicação | A * B = 200 |
/ | Divisão | B / A = 2 |
% | Módulo – resto da divisão | B % A = 0 |
++ | Incrementa em 1 | A++ = 11 |
— | Decrementa em 1 | A– = 9 |
Operadores Relacionais
Operadores relacionais comparam 2 valores e retornam verdadeiro (true) ou falso (false).
Considere que a variável A contém o valor 10 e a variável B contém 20.
Operador | Descrição | Exemplo |
== | Igual | (A == B) é false |
!= | Não igual | (A != B) é true |
> | Maior que | (A > B) é false |
< | Menor que | (A < B) é true |
>= | Maior ou igual que | (A >= B) é false |
<= | Menor ou igual que | (A <= B) é true |
Operadores Lógicos
Operadores lógicos trabalham com operandos booleanos e o resultado também será um booleano.
Considere que a variável A contém o valor true (verdadeiro) e a variável B contém false (falso).
Operador | Descrição | Exemplo |
&& | Operador AND (E) | (A && B) é false |
|| | Operador OR (OU) | (A || B) é true |
! | Operador NOT (NÃO) ou Negação | !(A && B) é true |
Operadores Bit a bit
Operadores Bit a bit trabalham com os operandos a nível de bit, ao invés de considerar o valor que ele representa.
Este é um pouquinho difícil de entender no início pois trabalha com base 2 (os números 1 e 0) e no nosso dia a dia estamos acostumados a utilizar a base 10 (os números de 0 a 9). A base da computação é o bit, que pode assumir dois estados:
- ligado e desligado ou
- true (verdadeiro) e false (falso) ou ainda
- zero (0) e um (1)
Aguarde que veremos álgebra booleana com mais detalhes em outro artigo.
Para você começar a entender esse conceito, veja a tabela verdade para estes operadores:
0 & 0 = 0 | 0 | 0 = 0 | 0 ^ 0 = 0 |
0 & 1 = 0 | 0 | 1 = 1 | 0 ^ 1 = 1 |
1 & 0 = 1 | 1 | 0 = 1 | 1 ^ 0 = 0 |
1 & 1 = 0 | 1 | 1 = 1 | 1 ^ 1 = 1 |
Considere que a variável A contém o valor 3 (0011) e a variável B contém 11 (1011).
Operador | Descrição | Exemplo |
& | AND (E) | (A & B) = 3 (0011) |
| | OR (OU) | (A | B) = 11 (1011) |
^ | XOR (OU Exclusivo) | (A ^ B) = 8 (1000) |
~ | Operador Complement. Inverte todos os bits. | (~A ) = 12 (1100) |
<< | Deslocamento a direita | 5 (0101) << 2 = 1 (0001) |
>> | Deslocamento a esquerda | 5 (0101) >> 2 = 4 (0100) |
Operadores de Atribuição
Operadores de atribuição são utilizados para atribuirmos um valor a uma variável.
Operador | Descrição | Exemplo |
= | Atribuição simples | C = A + B atribui o valor de A + B em C |
+= | Atribuição aditiva | C += A equivale a C = C + A |
-= | Atribuição subtrativa | C -= A equivale a C = C – A |
*= | Atribuição multiplicativa | C *= A equivale a C = C * A |
/= | Atribuição de divisão | C /= A equivale a C = C / A |
%= | Atribuição de módulo | C %= A equivale a C = C % A |
<<= | Atribuição e deslocamento a esquerda | C <<= 2 equivale a C = C << 2 |
>>= | Atribuição e deslocamento a direita | C >>= 2 equivale a C = C >> 2 |
&= | Atribuição e AND bit a bit | C ^= 2 equivale a C = C ^ 2 |
^= | Atribuição e XOR bit a bit | C |= 2 equivale a C = C | 2 |
|= | Atribuição e OR bit a bit | C &= 2 equivale a C = C & 2 |
Outros Operadores
Existem ainda outros importantes operadores que não são classificados em nenhum tipo acima.
Operador | Descrição | Exemplo |
sizeof() | Retorna o tamanho do tipo de dado | sizeof(int); |
typeof() | Retorna o tipo de classe | typeof(StreamReader); |
& | Retorna o endereço de uma variável | &a; |
* | Ponteiro para uma variável | *a;
Cria um ponteiro chamado ‘a’ para uma variável |
? : | Expressão Condicional | Se condição é true ? então X : senão Y |
is | Determina se um objeto é de um certo tipo | If( Ford is Car) // checks if Ford is an object of the Car class |
as | Conversão (cast) sem “levanter” uma exceção (erro) se a conversão falhar | Object obj = new StringReader(“Hello”);
StringReader r = obj as StringReader; |
Precedência de Operadores em C#
A precedência de operador determina o agrupamento em uma expressão. Isso afeta o resultado de uma expressão. Certos operadores têm maior precedência do que outros.
Lembra de quando você resolvia equações no ginásio?
Existia uma regra, uma ordem que deve ser seguida para resolver as operações de uma expressão. Por exemplo, o operador de multiplicação tem maior precedência do que o operador de adição.
E para fazer com que a equação fosse resolvida em outra ordem, utilizamos parênteses.
Na programação funciona assim também.
Por exemplo:
x = 7 + 3 * 2
Primeiro resolvemos a multiplicação e depois a adição.
X = 7 + 6 X = 13
Para resolvermos a adição primeiro, utilizamos parênteses:
x = (7 + 3) * 2 x = 10 * 2 x = 20
Na tabela abaixo, operadores de maior precedência estão no topo.
Categoria | Operador | Associatividade |
Postfix | () [] -> . ++ – – | Esquerda para direita |
Unário | + – ! ~ ++ – – (type)* & sizeof | Direita para esquerda |
Multiplicativo | * / % | Esquerda para direita |
Aditivo | + – | Esquerda para direita |
Deslocamento | << >> | Esquerda para direita |
Relacional | < <= > >= | Esquerda para direita |
Igualdade | == != | Esquerda para direita |
Bit a bit AND | & | Esquerda para direita |
Bit a bit XOR | ^ | Esquerda para direita |
Bit a bit OR | | | Esquerda para direita |
AND Lógico | && | Esquerda para direita |
OR Lógico | || | Esquerda para direita |
Condicional | ?: | Direita para esquerda |
Atribuição | = += -= *= /= %=>>= <<= &= ^= |= | Direita para esquerda |
Vírgula | , | Esquerda para direita |
Palavras finais
Pode parecer confuso neste início, mas os operadores são parte essencial no desenvolvimento de um aplicativo.
Utilizamos com tanta frequência em nosso cotidiano de desenvolvedor que se torna algo natural e usamos sem pensar, sem dificuldade.
Meu e-book Como Aprender a Programar do Absoluto Zero está GRATUITO por tempo limitado!
Olha o link: 👉🏼 http://celsokitamura.com.br/como-aprender-a-programar
Bora aprender a programar!