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 <stdio.h>
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 <stdio.h>
 
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 <stdio.h>
 
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 <stdio.h>
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 <stdio.h>
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 definição de variáveis.

#include <stdio.h>
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 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 <stdio.h>
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 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 em C

Marcos Laureano 2009/05/08 11:22

operadores.txt · Última modificação: 2009/05/08 11:11 por laureano
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0