====== Operadores ======
===== Operadores Aritméticos =====
^ Operador ^ Operação ^
| + | Adição |
| - | Subtração |
| * | Multiplicação |
| / | Divisão |
| % | Módulo (resto da divisão) |
Todas estas operações exigem 2 operandos (números).
===== Operadores Unários =====
^ Operador ^ Operação ^
| ++ | Incremento |
| -- | Decremento |
A posição relativa destes operadores em relação a variável influencia o seu funcionamento. Se os operadores forem colocados antes da variável em uma expressão, inicialmente será efetuado o incremento e depois será utilizado este novo valor na expressão.
Se os operadores forem colocados após a variável, primeiro será utilizado o valor atual da variável na expressão, e após, será realizado o incremento ou decremento.
#include
int main (void)
{
int iValor_01 = 10, iValor_02 = 5, iValor_03 = 8;
int iResultado;
iResultado = iValor_01++ + 9; /* Retorna 10 para iValor_01
iResultador = 10 + 9
iValor_01 = iValor_01 + 1 */
printf("Resultado 1 %d\n", iResultado);
iResultado = --iValor_02 + 10; /* iValor_02 = iValor_02 - 1
iValor_02 fica com o valor 4
iResultado = 4 + 10 */
printf("Resultado 2 %d\n", iResultado);
iResultado = ++iValor_03 * ++iValor_03; /* iValor_03 = iValor_03 + 1
Retorna 9 para iValor_03
iValor_03 = iValor_03 + 1
Retorna 10 para iValor_03
iResultado = 9 * 10 */
printf("Resultado 3 %d\n", iResultado);
iResultado = iValor_01++ * iValor_01++; /* Retorna 11 para iValor_01
iValor_01 = iValor_01 + 1
Retorna 12 para iValor_01
iResultado = 11 * 12
iValor_01 = iValor_01 + 1 */
printf("Resultado 4 %d\n", iResultado);
return 0;
}
===== Operadores de Atribuição =====
^ Operador ^ Operação ^
| += | Adição |
| -= | Subtração |
| *= | Multiplicação |
| /= | Divisão |
| %= | Módulo |
Como é comum a atribuição aonde uma variável é somada ou diminuída de um valor e o resultado é atribuído à mesma variável, a Linguagem C disponibiliza uma maneira curta de realizar este tipo de operação.
#include
int main(void)
{
int iValor_01, iValor_02, iValor_03, iValor_04;
iValor_01 = 5;
iValor_02 = 9;
iValor_03 = -2;
iValor_04 = 24;
iValor_01 += 7; /* equivale a iValor_01 = iValor_01 + 7 */
iValor_02 -= (iValor_03*8); /* equivale a iValor_02 = iValor_02 - (iValor_03 *8) */
iValor_03 *= 4; /* equivale a iValor_03 = iValor_03 * 4 */
iValor_04 /= 6; /* equivale a iValor_01 = iValor_01 / 6 */
printf("\nValor 01 = %d", iValor_01);
printf("\nValor 02 = %d", iValor_02);
printf("\nValor 03 = %d", iValor_03);
printf("\nValor 04 = %d", iValor_04);
return 0;
}
===== Operadores Relacionais =====
^ Operador ^ Operação ^
| < | Menor que |
| > | Maior que |
| %%<=%% | Menor ou igual a |
| >= | Maior ou igual a |
| == | Igual |
| != | Diferente |
Os operadores relacionais servem para realizar a comparação de dois valores distintos. A implementação da Linguagem C retorna como resultado destas operações os seguintes valores:
* 0 - Operação obteve o resultado falso;
* 1 - Operação obteve o resultado verdadeiro.
#include
int main(void)
{
printf("\n 5 > 7 ? A resposta é: %d", 5 > 7);
printf("\n 5 > 4 ? A resposta é: %d", 5 > 4);
printf("\n 7 < 1 ? A resposta é: %d", 7 < 1);
printf("\n 4 < 7 ? A resposta é: %d", 4 < 7);
printf("\n 13 == 13 ? A resposta é: %d", 13 == 13 );
printf("\n 24 == 22 ? A resposta é: %d", 24 == 22 );
printf("\n 13 != 13 ? A resposta é: %d", 13 != 13 );
printf("\n 24 != 22 ? A resposta é: %d", 24 != 22 );
return 0;
}
===== Prioridade de Avaliação =====
^ Operadores ^ Prioridade ^
| ++ -- | Prioridade mais alta |
| * / % | Prioridade média |
| + - | Prioridade baixa |
Quando é utilizada uma série de operadores em uma expressão, deve-se sempre ter em mente a prioridade em que o compilador irá realizar estas operações.
Os operadores unários têm a maior prioridade e serão executados por primeiro. Depois serão executadas todas as operações multiplicativas (*, / e %). Por último serão executadas as operações aditivas (+ e -).
#include
int main(void)
{
int iValor_01 = 10;
int iResultado;
iResultado = 10 - 5 * 8; /* Ocorre a multiplicação (5*8=40) e depois subtrai (10-40) = 30 */
printf("Resultado 1 %d\n", iResultado);
iResultado = 7 * --iValor_01 - 4; /* Retorna 9 para iValor_01
Realiza a multiplicação (7*9=63)
Subtrai 4 (63-4 = 59) */
printf("Resultado 2 %d\n", iResultado);
return 0;
}
===== Operadores Lógicos =====
^ Operadores ^ Prioridade ^
| && | Operação lógica E |
| %%||%% | Operação lógica OU |
| ! | Operação lógica negação |
Os operadores lógicos consideram dois operandos como valores lógicos (verdadeiro e falso) e realizam a operação binária correspondente. A linguagem C considera como valor verdadeiro qualquer valor diferente de zero. O valor falso será indicado pelo valor zero.
Estas operações quando aplicadas irão retornar 1 ou zero, conforme o resultado seja verdadeiro ou falso.
#include
int main(void)
{
int iValor_01 = 10;
int iResultado;
/* iValor_01 > 8 retorna verdadeiro ou seja 1
iValor_01 != 6 retorna verdadeiro ou seja 1 */
iResultado = (iValor_01 > 8) && (iValor_01 != 6); /* A expressão lógica 1 e 1 retorna 1. Lembrando que 0 representa o valor lógico falso
e diferente de zero (1,2,3,etc..) representa o valor lógico verdadeiro. */
printf("Resultado: %d\n", iResultado);
return 0;
}
===== Assinalamento de Variáveis =====
Para a linguagem C o assinalamento é considerado um operador. Isto significa que podem ser colocados assinalamentos dentro de qualquer comando que exija um valor qualquer.
Sempre que um assinalamento é efetuado, a Linguagem C retorna como resultado do assinalamento o valor que foi colocado em variáveis. Por isso pode-se utilizar este valor retornado pelo operador **''=''** e colocar como se fosse um novo assinalamento, concatenando os mesmos. Veja também [[variavel_definicao|definição de variáveis]].
#include
int main(void)
{
int i,j,k,w;
i = j = k = 20;
printf ("Variavel i: %d\n", i );
printf ("Variavel j: %d\n", j );
printf ("Variavel k: %d\n", k );
printf ("Resultado da expressao: %d\n", w = 90);
printf ("Variavel w: %d\n", w );
return 0;
}
===== Parênteses e Colchetes como Operadores =====
Em C, parênteses são operadores que aumentam a precedência das operações dentro deles.
Colchetes realizam a indexação de [[vetor_matriz|matrizes]]. Dada uma matriz, a expressão dentro de colchetes provê um índice dentro dessa matriz.
===== A precedência dos operadores em C =====
^ ^ Operador ^
| Maior | ( ) [ ] %%->%% |
| | ! ~ ++ -- -(tipo) * & sizeof |
| | * / % |
| | + - |
| | %%<< >>%% |
| | %%<<= >>=%% |
| | == != |
| | & |
| | %%^%% |
| | %%|%% |
| | && |
| | %%||%% |
| | ? |
| | = += -= *= /= |
| Menor | , |
/* operadores_parenteses.c */
#include
int main(void)
{
int iVlr_a,iVlr_b;
int iResultado;
/* Atribui 90 a variavel iVlr_a;
Realiza a multiplicacao (9*90=810);
Imprime o resultado (810) */
printf("Resultado da expressao 1: %d\n", 9*(iVlr_a = 90));
printf("Variavel iVlr_a: %d\n", iVlr_a );
/* Atribui 50 a variável iVlr_b.
Realiza a multiplicação (20*50=1000).
Atribui 1000 a variável resultado.
Imprime o conteúdo da variável iResultado (1000). */
printf("Resultado da expressao 2: %d\n", iResultado = (20*(iVlr_b=50)));
printf("Variavel iVlr_b: %d\n", iVlr_b );
printf("Variavel resultado: %d\n", iResultado );
return 0;
}
**Observação**: Embora a Linguagem C permita o assinalamento de variáveis no meio de expressões, seu uso não é recomendado pois dificulta o entendimento do programa.
===== Operador & e * para Ponteiros =====
O primeiro operador de [[ponteiros|ponteiro]] é **''&''**. Ele é um operador unário que devolve o endereço na memória de seu operando. Por Exemplo:
m = &count;
põe o endereço na memória da variável ''count'' em ''m''. Esse endereço é a posição interna da variável no computador e não tem nenhuma relação com o valor de ''count''. Você pode imaginar ''&'' como significando o **endereço de**.
O segundo operador é **''*''**, que é o complemento de ''&''. O ''*'' é um operador unário que devolve o valor da variável localizada no endereço que o segue. Por exemplo, se ''m'' contém o endereço da variável ''count'':
q = *m;
coloca o valor de ''count'' em ''q''. Pense no ''*'' como significando no **endereço de**.
Observações:
* Cuidado para não confundir ''*'' como multiplicação na utilização de ponteiros e vice-versa;
* Cuidado para não confundir ''&'' como o operador relacional ''&&'' e vice-versa.
Veja também [[ponteiros|ponteiros em C]]
--- //[[marcos@laureano.eti.br|Marcos Laureano]] 2009/05/08 11:22//