(Parte 6 de 13)

Sistemas Industriais Inteligentes – DAS – CTC – UFSC 23

4 Operadores

4.1 Operadores Aritméticos

C é uma linguagem rica em operadores, em torno de 40. Alguns são mais usados que outros, como é o caso dos operadores aritméticos que executam operações aritméticas.

C oferece 6 operadores aritméticos binários (operam sobre dois operandos) e um operador aritmético unário (opera sobre um operando). São eles:

Binários:

= Atribuição + Soma - Subtração * Multiplicação / Divisão % Módulo (devolve o resto da divisão inteira)

Unário: - Menos unário (indica a troca do sinal algébrico do valor)

O operador = já é conhecido dos exemplos apresentados anteriormente. Em C, o sinal de igual não tem a interpretação dada em matemática. Representa a atribuição da expressão à direita ao nome da variável à esquerda.

Os operadores + - / * representam as operações aritméticas básicas de soma, subtração, divisão e multiplicação. A seguir está um programa que usa vários operadores aritméticos e converte temperatura Fahrenheit em seus correspondentes graus Celsius.

/* Programa Exemplo dos operadores: + - * / */ #include <stdio.h> void main() { int ftemp = 0; int ctemp = 0; printf("Digite temperatura em graus Fahrenheit: "); scanf("%d", &ftemp); ctemp = (ftemp - 32)*5/9; printf("Temperatura em graus Celsius e %d", ctemp); }

O operador módulo (%) aceita somente operandos inteiros. Resulta o resto da divisão do inteiro à sua esquerda pelo inteiro à sua direita. Por exemplo, 17%5 tem o valor 2 pois quando dividimos 17 por 5 teremos resto 2.

4.2 Operadores Relacionais

Os operadores relacionais são usados para fazer comparações. Em C não existe um tipo de variável chamada “booleana”, isto é, que assuma um valor verdadeiro ou falso. O valor zero (0) é considerado falso e qualquer valor diferente de 0 é considerado verdadeiro e é representado pelo inteiro 1. Os operadores relacionais comparam dois

Curso de Linguagem Computacional C/C++

Sistemas Industriais Inteligentes – DAS – CTC – UFSC 24 operandos e retornam 0 se o resultado for falso e 1 se o resultado for verdadeiro. Os operadores relacionais disponíveis em C são:

O programa a seguir mostra expressões booleanas como argumento da função printf():

/* Exemplo de Operadores Relacionais */ #include <stdio.h> void main() { int verdade, falso; verdade = (15 < 20); falso = (15 == 20); printf("Verdadeiro= %d, falso= %d\n", verdade, falso); }

Note que o operador relacional “igual a” é representado por dois sinais de iguais. Um erro comum é o de usar um único sinal de igual como operador relacional. O compilador não o avisará que este é um erro, por quê? Na verdade, como toda expressão C tem um valor verdadeiro ou falso, este não é um erro de programa e sim um erro lógico do programador.

4.3 Operadores lógicos binários

Estes operadores são empregados para comparar os bits contidos em duas variáveis, por isso, são denominados operadores lógicos binários. Ou seja, estes operadores fazem uma comparação lógica entre cada bit dos operandos envolvidos. Os operadores binários disponíveis são:

Operador C Função

E lógico OU lógico Ou Exclusivo Não Desloca esquerda Desloca direita

A seguir temos um exemplo da aplicação destes operadores.

/* Exemplo usando Operadores Binarios */ #include <stdio.h>

Curso de Linguagem Computacional C/C++

Sistemas Industriais Inteligentes – DAS – CTC – UFSC 25 void main() { int i, j, k; i = 1; j = 2; printf("\ti = %x (00000001)\n\tj = %x (00000010)", i, j); k = i & j; /* k = i AND j */ printf("\n\t i & j => %x (0)", k); k = i j; /* k = i XOR j */ printf("\n\t i j => %x (01)", k); k = i << 2; /* k = i deslocando 2 bits à esquerda (4) */ printf("\n\t i << 2 => %x (00000100)", k); }

Primeiro o programa faz uma comparação binária ‘e’(&) entre o número 1 (0x00000001) e o número 2 (0x00000010). Por isso o resultado obtido é logicamente 0, ou seja, 0x00000000.

Em seguida, o programa faz uma comparação binária ‘ou’ () entre estes dois números, resultando agora, lógicamente, 3, ou seja, (0x00000011).

Por fim, o programa desloca o número 1 em duas casas para a esquerda, representado no programa pelo operador << 2. Assim, o resultado é o número 4 ou, em binário, (0x00000100). A partir deste exemplo fica clara a utilização destes operadores.

4.4 Operadores de Ponteiros

Estes operadores já foram apresentados anteriormente na secção sobre ponteiros (ver 2.7). O primeiro operador server para acessar o valor da variável, cujo endereço está armazenado em um ponteiro. O segundo operador server para obter o endereço de uma variável.

Operador Função

∗ Acesso ao conteúdo do ponteiro

O programa abaixo apresenta novamente a aplicação destes operadores.

/* Operadores de Ponteiros */ void main() { int i, j, *ptr; ptr = &i; /* atribui a ptr o endereço da variável i */ j = *ptr; /* atribui a j o conteúdo do endereço definido por */ /* ptr = valor de i ! */ }

4.5 Operadores Incrementais e Decrementais

Uma das razões para que os programas em C sejam pequenos em geral é que C tem vários operadores que podem comprimir comandos de programas. Neste aspecto, destaca-se os seguintes operadores:

Operador Função

+ + Incrementa em 1 - - Decrementa em 1

Curso de Linguagem Computacional C/C++

Sistemas Industriais Inteligentes – DAS – CTC – UFSC 26

O operador de incremento (++) incrementa de um seu operando. Este operador trabalha de dois modos. O primeiro modo é chamado pré-fixado e o operador aparece antes do nome da variável. O segundo é o modo pós-fixado em que o operador aparece seguindo o nome da variável.

Em ambos os casos, a variável é incrementada. Porém quando ++n é usado numa instrução, n é incrementada antes de seu valor ser usado, e quando n++ estiver numa instrução, n é incrementado depois de seu valor ser usado. O programa abaixo mostra um exemplo destes operadores, ressaltando esta questão.

/* Operadores de Incremento */ #include <stdio.h> void main() { int n, m, x, y; n = m = 5; x = ++n; y = m++; printf("O resultado e:\n n = %d; x = ++n = %d;\n m = %d; y = m++ = %d;", n, x, m, y); }

Vamos analisar duas expressões seguintes. a) k = 3*n++;

Aqui, primeiro ‘n’ é multiplicado por 3, depois o resultado é atribuído a ‘k’ e, finalmente, ‘n’ é incrementado de 1.

b) k = 3*++n;

Aqui, primeiro ‘n’ é incrementado em 1, depois ‘n’ é multiplicado por 3 e, por fim, o resultado é atribuído a ‘k’.

Dica: Para evitar problemas, faça uso de parênteses para guiar a exeução do programa evitando que o compilador não compreenda a ordem correta de executar a operação.

(Parte 6 de 13)

Comentários