VOLPITI - Tecnologia da Informação
 
Busca
Tópicos
  Cadastre-se :: Hospedagem LinuxDicas :: Acessórios LinuxDicas :: Fórum LinuxDicas   

Usuários LinuxDicas
· AvantGO
· Backend XML (RSS)
· Contato/Publicidade
· Enviar Notícias/Artigos
· Fórum LinuxDicas
· Lista de Discussão
· Mensagens Privadas

Casa do Linux


Lista de Discussão
·[linuxdicas] quetão de linux
·Ferramenta de Backup
·redes
·Search Engine

Leia mais...

Artigos LinuxDicas
· Resistência ao Linux
· Guia para o Novato
· Licenciamento do SuSE
· Foca GNU/Linux - Iniciante
· Foca GNU/Linux - Intermediário
· Foca GNU/Linux - Avançadoe
· Curso C
· Outras Seções de Artigos

FAQ LinuxDicas
· Licença
· Servidores
· Ambiente X
· Hardware
· Instalação
· Internet
· Aplicativos
· Sistema
· StarOffice

Notícias Velhas
Segunda, abril 21
· MON - Monitorando a disponibilidade de serviços
Quinta, abril 17
· Últimos dias para Inscrições de Palestras no Flisol Campinas
· Acessando seus arquivos de sua máquina de qualquer computador do mundo
Terça, abril 15
· Artigo sobre o Moregroupware
Segunda, abril 14
· Análise do Mandriva Xtreme2 Pack
Terça, março 18
· Como migrar dados do msaccess para mysql
· A verdadeira razão para usarmos Linux
· usando o rsync 3.0.0 para fazer backup entre linux e xp
· Firefox3 : Como Instalar manualmente.
Sábado, fevereiro 09
· Configurando um DNS CHROOTED Primário e Reverso para o seu site.
Quinta, dezembro 27
· Censurando a internet com o OpenDNS
Domingo, outubro 14
· Bandwidth Monitoring Tools For Linux
Quinta, outubro 11
· Variáveis de ambiente
Quinta, agosto 02
· Rodando processos em múltiplos servidores, Cluster!!!
· Instalando XEN no seu Ubuntu/Debian
Domingo, junho 17
· Vovó, faz backup pra mim?
Quarta, junho 13
· Canetas: Idealismo Antártico
Quinta, junho 07
· CA confiável com certificados digitais
Domingo, junho 03
· Equações Matemáticas via Shell
Sábado, junho 02
· Permanent Link to Garimpar é preciso [2]: Confira seu e-mail

Notícias antigas

Versões Estáveis
· Kernel Linux
· *nix e *BSD ISOs da Unicamp
· Linux ISO
· FreeBSD Releases

Curso C - 4. Operadores

(2107 total de palavras neste texto)
(4510 vizualização(ões))   Imprimir




Curso de C - 4. Operadores em C

Estamos na quarta aula, e esperamos que vocês tenham aproveitado bastante as aulas até aqui elaboradas. Já aprendemos sobre a estrutura básica de um programa em C, sobre os tipos de dados que C pode manipular, sobre o que são variáveis e constantes. Na aula de hoje você aprenderá a criar expressões em C com o uso de operadores, sejam eles aritméticos, lógicos, relacionais, etc. Mostraremos vários exemplos e finalizaremos a aula com exercícios.

Então, pé na tábua!

4.1. O Operador de Atribuição

Na aula sobre variáveis já foi falado sobre o operador de atribuição (o símbolo de igual "="). O que ele faz é colocar o valor de uma expressão (do lado direito) em uma variável (do lado esquerdo). Um expressão neste caso pode ser um valor constante, uma variável ou uma expressão matemática mesmo.

É um operador binário, ou seja, trabalha com dois operandos. Exemplos:

Atribuição de uma constante a uma variável:

  n= 10;
  ch= 'a';
  fp= 2.51;

Atribuição do valor de uma variável a outra variável:

  n= num;

Atribuição do valor de uma expressão a uma variável:

  n= (5+2)/4;

Atribuições múltiplas:

  x = y = z = 20;

Em uma atribuição, primeiro é processado o lado direito. Depois de processado, então, o valor é atribuído a variável.

Como você viu no último exemplo acima, C também permite atribuições múltiplas (como x = y = z = 20;). Neste caso, todas as variáveis da atribuição (x, y e z) recebem o valor mais à direita (20).

4.2. Os Operadores Aritméticos

Estes são, de longe, os mais usados. Os operadores aritméticos em C trabalham praticamente da mesma forma que em outras linguagens. São os operadores + (adição), - (subtração), * (multiplicação), / (divisão) e % (módulo ou resto da divisão inteira), todos estes binários (de dois operandos). Temos também o - unário, que muda o sinal de uma variável ou expressão para negativo. Veja a tabela a seguir:

Operador Descrição Exemplo
- unário Inverte o sinal de uma expressão -10, -n, -(5*3+8)
* Multiplicação 3*5, num*i
/ Divisão 2/6, n/(2+5)
% Módulo da divisão inteira (resto) 5%2, n%k
+ Adição 8+10, exp+num
- Subtração 3-6, n-p

A precedência dos operadores aritméticos é a seguinte:

Mais alta
- unário
* / %
+ -
Mais baixa

Uma expressão deste tipo:

  5 + 2 * 3 - 8 / 4

É avaliada assim: primeiro a multiplicação (2*3), depois a divisão (8/4). Os resultados obtidos destas duas operações são utilizados para resolver as duas últimas operações:

  5 + 6 - 2

adição e subtração. Igualzinho à matemática aprendida no primário...

Tudo isso porque as operações de multiplicação e divisão têm maior precedência e são resolvidas primeiro em uma expressão. Para mudar a ordem de operação, deve-se usar parênteses. Deve-se tomar cuidado ao construir expressões, pois a falta de parênteses pode causar erros no resultado.

O Operador % é equivalente ao mod em Pascal, e é útil em várias situações. Ele dá como resultado o resto da divisão inteira de dois operandos. Assim, fica fácil, por exemplo, saber se um número é múltiplo de outro:

  if ((num%3)==0)   /* se o resto da divisão entre num e 3 for igual a 0 ... */
  	printf("Múltiplo de 3\n");

Este é apenas um de vários problemas que podem ser resolvidos com o uso do operador %.

4.3. Operadores Relacionais e Lógicos

Os operadores relacionais e lógicos são usados em testes e comparações, principalmente nos comandos de controle e nos laços.

Para entender melhor esses operadores, temos que entender o conceito de verdadeiro e falso. Em C, verdadeiro é qualquer valor diferente de zero, e falso é zero. As expressões que usam operadores relacionais e lógicos retornam 0 para falso e 1 para verdadeiro.

Os operadores relacionais são 6:

Operador Ação
< Menor que
<= Menor que ou igual
> Maior que
>= Maior que ou igual
== Igual
!= Diferente

Veja um exemplo do uso de operadores relacionais:

  #include <stdio.h> 				/* Inclusão de stdio.h (necessário para printf e scanf) */
  
  int main()
  {
  	int n;					/* Declaração de uma variável inteira */
  	
  	printf("Digite um número: ");          
  	scanf("%d", &n);                        /* Lê o número e armazena na variável n */
  	if (n < 0)                              /* Se n for MENOR QUE 0... */
  		printf("Número negativo\n");    /* ... escreve isto. */
  	else                                    /* Senão... */
  		printf("Número positivo\n");    /* ... escreve isto. */ 
  	return 0;                               /* Retorna 0 para o sistema (sucesso) */  
  }

Tente fazer alguns testes com os outros operadores relacionais. Sei lá, seja criativo! Você é o programador... :)

Os operadores lógicos são 3:

Operador Ação Formato da expressão
&& and (e lógico) p && q
|| or (ou lógico) p || q
! not (não lógico) !p

Veja um exemplo, só do bloco if:

  if ((n > 0) && (n < 100)) 				/* se n for maior que 0 E n for menor que 100... */
  	printf("Número positivo menor que 100\n");	/* ... imprime isto */

Outro exemplo:

  if ((n == 0) || (n == 1))			/* se n for IGUAL a 0 OU n for igual a 1 ... */
  	printf("zero ou um\n");                 /* ... imprime isto. */

A tabela seguinte mostra a precedência dos operadores relacionais e lógicos:

  Maior
  !
  >, >=, <, <=
  ==, !=
  &&
  ||
  Menor

Os parênteses também podem ser usados para mudar a ordem de avaliação das expressões, como no caso das expressões aritméticas.

4.4. Operadores de Incremento e Decremento

A linguagem C possui dois operadores que geralmente não são encontrados em outras linguagens, mas que facilita bastante a codificação: os operadores de incremento(++) e decremento(--).

O operador ++ soma 1 ao seu operando, similar a operação de variavel= variavel+1;, mas muito mais resumido.

O operador -- subtrai 1 de seu operando, também similar a variavel= variavel-1;.

Estes operadores são unários, e podem ser usados antes da variável:

  ++n;

ou depois da variável:

  n++;

A diferença é que, se o operador precede o operando (++n), o incremento ou decremento é realizado antes do valor da variável ser usado. E se o operador vem depois do operando (n++), o valor da variável poderá ser usado antes de acontecer a operação de incremento ou decremento. Veja estes dois exemplos:

Exemplo 1:

  n= 5;
  p= ++n;
  printf("%d ",p);	/* imprime na tela: 6 */

Exemplo 2:

  n= 5;
  p= n++;
  printf("%d ",p);	/* imprime na tela: 5 */

No exemplo 1, a variável n é incrementada de 1 ANTES de seu valor ser atribuído a p. No exemplo 2, o valor de n é atribuído a p antes de acontecer a operação de incremento. Essa é a diferença de se colocar esses operadores antes ou depois da variável.

4.5. Operadores Aritméticos de Atribuição

Algumas operações de atribuição podem ser feitas de forma resumida. Por exemplo, a atribuição:

  x= x+10;

pode ser escrita:

  x+=10;

A forma geral desse tipo de atribuição é:


  variável [operador]= [expressão];

que é igual a:

  variável= variável [operador] [expressão]

Veja essa tabela com exemplos:

Forma longa Forma resumida
x= x+10 x+=10
x= x-10 x-=10
x= x*10 x*=10
x= x/10 x/=10
x= x%10 x%=10

Se familiarize com essa notação, pois é um estilo largamente adotado pelos profissionais que trabalham com C.

4.6. Operadores Bit a Bit

A linguagem C, ao contrário de outras linguagens, suporta um amplo conjunto de operadores bit a bit. Como C precisava substituir a linguagem Assembly na maioria das tarefas, era de vital importância que pudesse realizar essas operações.

As operações bit a bit manipulam diretamente os bits de um byte ou uma palavra, e essas operações só podem ser feitas em variáveis int e char (e suas variantes). Os tipos void, float, double e long double NÃO podem ser usados.

Esses operadores são usados com mais frequência em drivers de dispositivo, como rotinas de impressoras, modems, operações com arquivos em disco, rotinas da porta serial e paralela, etc.

Veja os operadores bit a bit:

  Operador	Ação
     &		and ("e" lógico)
     |		or ("ou" lógico)
     ^		exclusive or ("ou exclusivo")
     ~		complemento de 1
     >>		deslocamento à direita
     <<		deslocamento à esquerda

Obs: Não confunda os operadores bit a bit com os operadores lógicos.

Para saber como se comportam os operadores bit a bit, segue abaixo uma tabela verdade dos operadores, com excessão dos operadores de deslocamento:

p q p&q p|q p^q ~p
0 0 0 0 0 1
0 1 0 1 1 1
1 0 0 1 1 0
1 1 1 1 0 0

O operador & compara os dois operandos bit a bit e cada bit do resultado é 1 somente quando os dois bits do operando for 1. Caso contrário, 0.

O bits do resultado de uma operação | bit a bit só será 1 quando um dos dois bits, ou os dois, forem 1. Na operação ^ só será 1 quando os bits dos operandos forem diferentes. Se forem iguais (0^0 ou 1^1) será 0.

O operador de complemento (~) é um operador unário que inverte os bits do operando. 1 vira 0 e 0 vira 1.

Vejamos um exemplo mais claro. Digamos que as variáveis inteiras x e y recebem os valores 8 e 9, respectivamente:

  x= 8;    /* 8 em binário é 1000 */
  y= 9;    /* 9 em binário é 1001 */

Vamos fazer algumas operações bit a bit nesses números:

  x & y:
  	1000
  	1001
  	----
  	1000	=> O resultado desta operação é 8 (1000).
  	
  x | y:
  	1000
  	1001
  	----
  	1001	=> O resultado desta operação é 9 (1001).
  	
  x ^ y:
  	1000
  	1001
  	----
  	0001	=> O resultado desta operação é 1.
  	
  ~x:	1000
    	----
  	0111	=> O resultado desta operação é 7 (111).
  	
  ~y:	1001
      	----
  	0110	=> O resultado desta operação é 6 (110).

Aí você me pergunta: e os operadores de deslocamento? Esses operadores deslocam n bits para a esquerda ou direita:

  x>>1	0100	=> resultado: 4 
  x>>2	0010	=> resultado: 2 
  
  y<<1	10010	=> resultado: 18
  x<<1	10000	=> resultado: 16

Você deve ter notado que deslocar um bit à direita é o mesmo que dividir o número por 2. Deslocar 2 bits à direita é o mesmo que dividir o número por 4, e assim por diante.

Deslocar um bit à esquerda, porém, é o mesmo que multiplicar o número por 2. Deslocar 2 bits à esquerda significa multiplicar por 4, e assim por diante.

Em um determinado ponto do curso, criaremos uma calculadora bit a bit, onde vocês poderão estudar melhor essas operações.

4.7. O Operador Ternário ?

Esse operador será abordado com mais detalhes na aula das estruturas de controle (if, else, etc.). Vamos ver um exemplo:

  a>34 ? printf("Certo!\n") : printf("Errado!\n");

O comando acima primeiro avalia se a expressão a>34 é verdadeira. Se for, executa o comando após o ?; senão, executa o comando após o :. É a mesma coisa que fazer:

  if (a>34)
  	printf("Certo!\n");
  else
  	printf("Errado!\n");

Pessoal, na próxima aula estudaremos entrada e saída pelo console:

  • vamos dissecar a função printf();
  • conhecer os caracteres especiais (\n, \t, etc.);
  • aprender a ler dados com scanf();
  • ver as funções de impressão e leitura de caracteres getchar() e putchar();
  • saber como ler e imprimir strings com gets(), puts() e fgets();
  • s aber as vantagens, desvantagens e macetes de cada função;

Estudem bastante e façam os exercícios.


Exercícios:

1) Para que serve o operador de atribuição?

2) Assinale a expressão aritmética com resultado CORRETO:

  	a) 2+3*5 = 30
  	b) 5*2/2 = 5
  	c) 4+6-8/2 = 6
  	d) (-3)*4 = 12

3) As expressões a seguir têm como resultado VERDADEIRO (1) ou FALSO (0)?

  	a) 1 > 2
  	b) 2 >= 1
  	c) 3 != 3
  	d) 'c' == 'c'

4) Crie a seguinte expressão no programa a seguir:

  #include <stdio.h>
  
  int main()
  {
  	int x, y, z, media;
  	x= 8;
  	y= 15;
  	z= 37;
  	
  	/* CRIE NESTA LINHA UMA EXPRESSÃO QUE CALCULE A MÉDIA ENTRE x, y e z E RETORNE O RESULTADO PARA A VARIÁVEL media */
  	
  	printf("Média: %d\n", media);
  	return 0;
  }

Powered by txt2tags

  

[ Voltar Curso C | Índice de Seções ]


Copyright © 2002 - 2007 LinuxDicas - Todos Os Direitos Reservados.
LinuxDicas: lucas.martinez @linuxdicas.com.br
Web site engine's code is Copyright © 2003 by PHP-Nuke. All Rights Reserved. PHP-Nuke is Free Software released under the GNU/GPL license.
Tempo para gerar esta página: 0.049 segundos.