C - Operadores
Um operador é um símbolo que informa ao compilador para executar funções matemáticas ou lógicas específicas. A linguagem C é rica em operadores integrados e fornece os seguintes tipos de operadores -
- Operadores aritméticos
- Operadores Relacionais
- Operadores lógicos
- Operadores bit a bit
- Operadores de atribuição
- Operadores diversos
Veremos, neste capítulo, como cada operador funciona.
Operadores aritméticos
A tabela a seguir mostra todos os operadores aritméticos suportados pela linguagem C. Assumir variávelA contém 10 e variável B detém 20 então -
| Operador | Descrição | Exemplo |
|---|---|---|
| + | Adiciona dois operandos. | A + B = 30 |
| - | Subtrai o segundo operando do primeiro. | A - B = -10 |
| * | Multiplica ambos os operandos. | A * B = 200 |
| / | Divide o numerador pelo de-numerador. | B / A = 2 |
| % | Operador de Módulo e o restante após uma divisão inteira. | B% A = 0 |
| ++ | O operador de incremento aumenta o valor inteiro em um. | A ++ = 11 |
| - | O operador Decrement diminui o valor inteiro em um. | A-- = 9 |
Operadores Relacionais
A tabela a seguir mostra todos os operadores relacionais suportados por C. Variável assumida A contém 10 e variável B detém 20 então -
| Operador | Descrição | Exemplo |
|---|---|---|
| == | Verifica se os valores de dois operandos são iguais ou não. Se sim, então a condição se torna verdadeira. | (A == B) não é verdade. |
| ! = | Verifica se os valores de dois operandos são iguais ou não. Se os valores não forem iguais, a condição se torna verdadeira. | (A! = B) é verdade. |
| > | Verifica se o valor do operando esquerdo é maior que o valor do operando direito. Se sim, então a condição se torna verdadeira. | (A> B) não é verdade. |
| < | Verifica se o valor do operando esquerdo é menor que o valor do operando direito. Se sim, então a condição se torna verdadeira. | (A <B) é verdade. |
| > = | Verifica se o valor do operando esquerdo é maior ou igual ao valor do operando direito. Se sim, então a condição se torna verdadeira. | (A> = B) não é verdade. |
| <= | Verifica se o valor do operando esquerdo é menor ou igual ao valor do operando direito. Se sim, então a condição se torna verdadeira. | (A <= B) é verdadeiro. |
Operadores lógicos
A tabela a seguir mostra todos os operadores lógicos suportados pela linguagem C. Assumir variávelA detém 1 e variável B segura 0, então -
| Operador | Descrição | Exemplo |
|---|---|---|
| && | Operador lógico chamado AND. Se ambos os operandos forem diferentes de zero, a condição se torna verdadeira. | (A && B) é falso. |
| || | Operador lógico ou chamado. Se qualquer um dos dois operandos for diferente de zero, a condição se torna verdadeira. | (A || B) é verdade. |
| ! | Operador lógico chamado NOT. É usado para reverter o estado lógico de seu operando. Se uma condição for verdadeira, então o operador lógico NOT a tornará falsa. | ! (A && B) é verdade. |
Operadores bit a bit
O operador bit a bit funciona em bits e executa a operação bit a bit. As tabelas de verdade para &, | e ^ são as seguintes -
| p | q | p & q | p | q | p ^ q |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 | 1 |
Suponha que A = 60 e B = 13 no formato binário, eles serão os seguintes -
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A | B = 0011 1101
A ^ B = 0011 0001
~ A = 1100 0011
A tabela a seguir lista os operadores bit a bit suportados por C. Suponha que a variável 'A' contenha 60 e a variável 'B' contenha 13, então -
| Operador | Descrição | Exemplo |
|---|---|---|
| E | O operador Binário AND copia um bit para o resultado se ele existir em ambos os operandos. | (A e B) = 12, ou seja, 0000 1100 |
| | | O operador binário OR copia um bit se ele existir em qualquer operando. | (A | B) = 61, ou seja, 0011 1101 |
| ^ | O operador binário XOR copia o bit se for definido em um operando, mas não em ambos. | (A ^ B) = 49, ou seja, 0011 0001 |
| ~ | O operador de complemento do binário um é unário e tem o efeito de 'inverter' bits. | (~ A) = ~ (60), ou seja ,. -0111101 |
| << | Operador binário de deslocamento à esquerda. O valor dos operandos à esquerda é movido para a esquerda pelo número de bits especificado pelo operando à direita. | A << 2 = 240 ou seja, 1111 0000 |
| >> | Operador binário de deslocamento à direita. O valor dos operandos à esquerda é movido para a direita pelo número de bits especificado pelo operando à direita. | A >> 2 = 15 ou seja, 0000 1111 |
Operadores de atribuição
A tabela a seguir lista os operadores de atribuição suportados pela linguagem C -
| Operador | Descrição | Exemplo |
|---|---|---|
| = | Operador de atribuição simples. Atribui valores de operandos do lado direito para operando do lado esquerdo | C = A + B irá atribuir o valor de A + B a C |
| + = | Adicionar operador de atribuição AND. Ele adiciona o operando direito ao operando esquerdo e atribui o resultado ao operando esquerdo. | C + = A é equivalente a C = C + A |
| - = | Subtraia o operador de atribuição AND. Ele subtrai o operando direito do operando esquerdo e atribui o resultado ao operando esquerdo. | C - = A é equivalente a C = C - A |
| * = | Operador de atribuição Multiply AND. Ele multiplica o operando direito pelo operando esquerdo e atribui o resultado ao operando esquerdo. | C * = A é equivalente a C = C * A |
| / = | Operador de divisão AND atribuição. Ele divide o operando esquerdo com o operando direito e atribui o resultado ao operando esquerdo. | C / = A é equivalente a C = C / A |
| % = | Módulo E operador de atribuição. Leva o módulo usando dois operandos e atribui o resultado ao operando esquerdo. | C% = A é equivalente a C = C% A |
| << = | Deslocamento para a esquerda E operador de atribuição. | C << = 2 é igual a C = C << 2 |
| >> = | Deslocamento à direita E operador de atribuição. | C >> = 2 é igual a C = C >> 2 |
| & = | Operador de atribuição AND bit a bit. | C & = 2 é igual a C = C & 2 |
| ^ = | OR exclusivo bit a bit e operador de atribuição. | C ^ = 2 é igual a C = C ^ 2 |
| | = | OR inclusivo bit a bit e operador de atribuição. | C | = 2 é igual a C = C | 2 |
Operadores diversos ↦ sizeof & ternário
Além dos operadores discutidos acima, existem alguns outros operadores importantes, incluindo sizeof e ? : suportado pela linguagem C.
| Operador | Descrição | Exemplo |
|---|---|---|
| tamanho de() | Retorna o tamanho de uma variável. | sizeof (a), onde a é inteiro, retornará 4. |
| E | Retorna o endereço de uma variável. | &uma; retorna o endereço real da variável. |
| * | Ponteiro para uma variável. | *uma; |
| ? : | Expressão condicional. | Se a condição for verdadeira? então valor X: caso contrário, valor Y |
Precedência de operadores em C
A precedência do operador determina o agrupamento de termos em uma expressão e decide como uma expressão é avaliada. Certos operadores têm precedência mais alta do que outros; por exemplo, o operador de multiplicação tem uma precedência mais alta do que o operador de adição.
Por exemplo, x = 7 + 3 * 2; aqui, x é atribuído a 13, não 20, porque o operador * tem uma precedência maior do que +, portanto, primeiro é multiplicado por 3 * 2 e, em seguida, é adicionado a 7.
Aqui, os operadores com a precedência mais alta aparecem na parte superior da tabela, aqueles com a mais baixa aparecem na parte inferior. Em uma expressão, os operadores de precedência mais altos serão avaliados primeiro.
| Categoria | Operador | Associatividade |
|---|---|---|
| Postfix | () [] ->. ++ - - | Da esquerda para direita |
| Unário | + -! ~ ++ - - (tipo) * & sizeof | Direita para esquerda |
| Multiplicativo | * /% | Da esquerda para direita |
| Aditivo | + - | Da esquerda para direita |
| Mudança | << >> | Da esquerda para direita |
| Relacional | <<=>> = | Da esquerda para direita |
| Igualdade | ==! = | Da esquerda para direita |
| E bit a bit | E | Da esquerda para direita |
| XOR bit a bit | ^ | Da esquerda para direita |
| OR bit a bit | | | Da esquerda para direita |
| E lógico | && | Da esquerda para direita |
| OR lógico | || | Da esquerda para direita |
| Condicional | ?: | Direita para esquerda |
| Tarefa | = + = - = * = / =% = >> = << = & = ^ = | = | Direita para esquerda |
| Vírgula | , | Da esquerda para direita |