# Operadores (programação)

Na programação e na lógica, os operadores são símbolos que informam ao compilador e para as expressões como realizar as operações matemáticas (manipulações), operações lógicas e, comparações específicas.

## Tipos

Os operadores são divididos nas seguintes categorias:
* Aritméticos
* Relacionais / Comparação
* Atribuição / Designação
* Lógicos / Booleanos
* Bitwise (Bit-a-Bit)
* Incremento / Decremento
* Concatenação
* Condicional / Ternário

### Operadores Aritméticos

São operadores usados em cálculos aritméticos simples, usando as quatro operações básicas da matemática (mais o módulo). Existem dois tipos de operadores matemáticos: unário (executam a ação com um único operando) e binário (executam ações com dois operandos).
Em uma expressão com vários operandos, a ordem de execução segue as regras de precedência de operadores.
| Operador | Operação | Uso | Explicação |
| + | Soma | a = +10; | operador unário, ação em 1 operando "a" |
| + | Soma | a + b | soma os operandos "a" e "b" |
| – | Subtração | a – b | subtrai o operando à direita "b" do operando à esquerda "a" |
| * | Multiplicação | a * b | multiplica os dois operandos "a" e "b" |
| / | Divisão | a / b | divide o operando à esquerda "a" pelo operando à direita "b" |
| % | Módulo | a % b | informa o resto da divisão do operando à esquerda "a" pelo operando à direita "b" |
| ** ^ | Exponenciação | a ** b | informa o valor do operando "a" elevado a "b": potência a$^b$ |

### Operadores Relacionais

São operadores que permitem uma relação entre dois valores (ou operandos) e, funcionam com quaisquer tipos de dados (operandos do mesmo tipo). Comparam o valor do operando à esquerda com o valor do operando à direita do operador, retornando um valor lógico (verdadeiro/falso) de acordo com a comparação.
No caso de duas sequências de texto (string), estas são consideradas iguais se tiverem o mesmo tamanho e todos os caractere forem iguais; as cadeias são comparadas caractere a caractere da esquerda para a direita até todos terem sido correspondidos e, se o final da sequência de texto for atingido antes do final da sequência correspondente, estas serão consideradas desiguais e com condição diferente.
| Operador | Operação | Uso | Explicação |
| == | Igualdade | a == b | Verifica se os dois valores são iguais (operandos "a" e "b"); se sim: retorna verdadeiro, senão: retorna falso. |
| != | Diferença | a != b | Verifica se os dois valores são diferentes (operandos "a" e "b"); se sim: retorna verdadeiro, senão: retorna falso. |
| > | Maior que | a > b | Verifica se o valor à esquerda "a" é maior do que o valor à direita "b"; se sim: retorna verdadeiro, senão: retorna falso. |
| < | Menor que | a < b | Verifica se o valor à esquerda "a" é menor do que o valor à direita "b"; se sim: retorna verdadeiro, senão: retorna falso. |
| >= | Maior ou igual a | a >= b | Verifica se o valor à esquerda é maior ou igual ao valor à direita; se sim: retorna verdadeiro, senão: retorna falso. |
| <= | Menor ou igual a | a <= b | Verifica se o valor à esquerda é menor ou igual ao valor à direita; se sim: retorna verdadeiro, senão, retorna falso. |

### Operadores de Atribuição

São operadores usados para fazer a atribuição de valor entre os operandos (atribuir valor a uma variável). A linguagem de script não tem suporte a várias atribuições em sequência na mesma expressão (como a=b=0). .
| Operador | Operação | Uso | Equivale | Explicação |
| = | Atribuição | a = b | | Atribui no operando à esquerda "a" o valor do operando à direita "b". |
| += | Soma com atribuição | a += b | a = a + b | Adiciona o operando do lado direito "b" ao operando do lado esquerdo "a" e, o resultado é salvo no operando do lado esquerdo "a". |
| -= | Subtração com atribuição | a -= b | a = a – b | Subtrai o operando do lado direito "b" do operando do lado esquerdo "a" e, o resultado é salvo no operando do lado esquerdo "a". |
| *= | Multiplicação com atribuição | a *= b | a = a * b | Multiplica o operando do lado direito "b" pelo operando do lado esquerdo "a" e, o resultado é salvo no operando do lado esquerdo "a". |
| /= | Divisão com atribuição | a /= b | a = a / b | Divide o operando do lado esquerdo "a" pelo operando do lado direito "b" e, o resultado é salvo no operando do lado esquerdo "a". |
| %= | Módulo com atribuição | a %= b | a = a % b | Módulo entre os operandos do lado esquerdo e direito "a" e "b" e, o resultado é salvo no operando do lado esquerdo "a". |
| &= | AND bitwise com atribuição | a &= b | a = a & b | Realiza a operação a & b e armazena o resultado no operando "a" |
| |= | OR bitwise com atribuição | a |= b | a = a | b | Realiza a operação a | b e armazena o resultado no operando "a" |
| ^= | XOR bitwise com atribuição | a ^= b | a = a ^ b | Realiza a operação a ^ b e armazena o resultado no operando "a" |
| <<= | Desloca à esquerda com atribuição | a << b | a = a << b | O valor do operando a esquerdo "a" é movido para a esquerda de acordo com o número de bits especificado pelo operando à direita "b" |
| >>= | Desloca à direita com atribuição | a >> b | a = a >> b | O valor do operando à esquerda "a" é movido para a direita de acordo com o número de bits especificado pelo operando à direita (divide a por 2$^b$) |

### Operadores Lógicos

São operadores que recebem na entrada dois tipos de valores booleanos (verdadeiro/falso) e o resultado também são valores booleanos. Úteis em múltiplas condições relacionais na mesma expressão. Os operadores lógicos têm precedência inferior aos operadores aritméticos. Na maioria das linguagens de programação, o valor 0 é considerado como “falso” e, qualquer número diferente de zero é convertido para “verdadeiro”. .
| Operador | Operação | Uso | Explicação |
| && and | AND lógico (E) | a && b | Informa verdadeiro se "a" e "b" forem verdadeiros, senão retorna falso. |
| || or | OR lógico (OU) | a || b | Informa falso se "a" e "b" náo forem verdadeiros; senão retorna verdadeiro |
| ! not | NOT lógico (NÃO) | !b | Informa verdadeiro se "b" for falso, senão retorna falso (operador unário). |

### Operadores Bitwise

São operadores que convertem números inteiros fornecidos e, executam a operação solicitada, o resultado é em representação decimal. Em algumas linguagens de programação o símbolo ^ indica a operação de exponenciação.
| Operador | Operação | Uso | Explicação |
| & | AND bitwise | a & b | |
| | | OR bitwise | a | b | |
| ^ | XOR bitwise | a ^ b | |
| ~ | NOT bitwise | ~a | Operador unário que inverte os bits (0 vira 1 e 1 vira 0). |
| << | Deslocamento à esquerda | a << b | O valor do operando a esquerdo "a" é movido para a esquerda de acordo com o número de bits especificado pelo operando à direita "b" (multiplica a por 2$^b$) |
| >> | Deslocamento à direita | a >> b | O valor do operando à esquerda "a" é movido para a direita de acordo com o número de bits especificado pelo operando à direita (divide a por 2$^b$) |

### Operadores de Incremento e Decremento

São operadores que somente recebem um valor (operando) na entrada. Onde "incrementar" aumentar o valor de um item (por padrão em 1 unidade) e "decrementar" diminuir o valor de um item.
| Operador | Operação | Uso | Explicação |
| ++ | Pós-incremento | a++ | Aumenta/incrementa "a" em 1 após usar seu valor |
| ++ | Pré-incremento | ++a | Aumenta/incrementa "a" em 1 antes de usar seu valor |
| — | Pós-decremento | a– | Diminui/decrementa a de 1 após usar seu valor |
| — | Pré-decremento | –a | Diminui/decrementa a de 1 antes de usar seu valor |

### Operador de Concatenação

São operadores que fazem a junção de duas ou mais sequências de texto (strings) formando uma nova sequência. .
| Operador | Operação | Uso | Explicação |
| + | Concatenação | a + b | O texto em "a" é unido ao texto em "b", formando assim um novo texto (string) |

### Operador Condicional

Operador similar ao uso do condicional (se-senão/if-else), que faz a operação testando uma condição.
c = (condição)? a : b
Se a condição retornar verdadeiro, então o valor de "a" é atribuído ao "c". Caso contrário, o valor de "b" será atribuído ao "c".

## A associatividade e precedência

Quando usar operadores para construir expressões ou algoritmos, é necessário saber como os operadores se relacionam entre si quando vários operadores são usados. Assim consideramos as regras de precedência de operadores e as regras de associatividade de operadores.
* Regras de precedência: especificam qual operador na expressão é avaliado primeiro quando dois operadores com precedência diferente são adjacentes. As expressões são avaliadas da esquerda para a direita: 1. unário negativo (-); 2. potência; 3. multiplicação, divisão e módulo, e; 4. adição e subtração.
* Regras de associatividade: especificam qual operador na expressão será avaliado primeiro quando dois operadores com a mesma precedência são adjacentes; quando existem dois ou mais operadores de mesma precedência DE (Direita para a Esquerda) e ED (Esquerda para a Direita).
Use parênteses ( ) para alterar a ordem de precedência ou associatividade dos operadores, informando qual operação deve ser executada primeiro; quando um operador de baixa precedência precisar ser executado por primeiro.
Os operadores de maior precedência na parte superior da tabela
| Tipo de Operador | Associatividade | Operador |
| Parênteses | ED | ( ) |
| Exponenciação | ED | ** ^ |
| Pós-fixo | ED | ++ — |
| Unário | DE | – ! ~++ — |
| Multiplicação / Divisão | ED | * / % |
| Adição / Subtração | ED | + – |
| Deslocamento | ED | << >> |
| Relacional | ED | < <= > >= |
| Igualdade | ED | == != |
| AND Bitwise | ED | & |
| XOR Bitwise | ED | ^ |
| OR Bitwise | ED | | |
| AND Lógico | ED | && |
| OR Lógico | ED | || |
| Condicional | DE | ?: |
| Atribuição | DE | += -= *= /= %= >>= <<= &= ^= |= |