Linguagem C – Operadores Objetivos Abordar os conceitos sobre os Operadores demonstrando o seu uso com exemplos para um melhor aprendizado. Pré-requisitos É necessário que o leitor tenha acompanhado o artigo anterior, pois os artigos obedecem a uma seqüência. Nota: Este artigo faz parte do curso de “Linguagem C – Básico’”. Operadores Os operadores indicam ao compilador a necessidade de se fazer manipulações matemáticas ou lógicas. Operadores aritméticos Os operadores aritméticos são usados para calcular expressões matemáticas. Sendo classificados em duas categorias: os binários ou unários. Os operadores unários atuam na inversão de valores. Veja a tabela abaixo. Operador binário Descrição = Atribuição + Soma Subtração / Divisão % Modulo (obtém o resto da divisão) Operador unário Ação Sinal negativo + Sinal positivo Tabela – Operadores aritméticos O operador de atribuição (=) já foi estudado no artigo “Linguagem C - Princípios básicos” para explicar como inicializar uma variável. O exemplo abaixo imprime os resultado na tela das operações de soma, subtração, multiplicação, divisão e o modulo entre dois números dados. Ilustrando assim o uso dos operadores aritméticos. Saída do programa: 69+24=93 69-24=45 69x24=1656.000 69/24=2.875 69 mod 24=21.000 Operadores de incremento e decremento O operador de incremento (++) soma 1 ao seu operando enquanto que o de decremento (--) subtrai um. Eles podem ser pré-fixados ou pós-fixados conforme mostra a tabela abaixo: Operador Instrução ++ -- Pós-fixado Pré-fixado var = var++; var = ++var; var = var+1; ou ou var++; ++var; var = var--; var= --var; ou ou var = var-1; var--; --var; Tabela – Operadores de incremento e decremento No caso das instruções mostradas acima não existe diferença, podemos aplicar tanto o pós-fixado quanto o pré-fixado. Mas quando esses operadores são usados em outras expressões necessita-se de cuidado, pois o uso incorreto pode ocasionar resultados inesperados. A diferença entre eles é que o pré-fixado incrementa a variável para depois executar a instrução e a pós-fixado executa a instrução para depois fazer o incremento da variável. Veja o exemplo abaixo: Saída do programa: var=6 var2=6 O programa acima incrementa a variável var e coloca o valor na var2 que no nosso caso será 6. Já o código abaixo coloca o valor da variável var na var2 que é 5 para depois incrementar a variável var. Saída do programa: var=6 var2=5 Operadores aritméticos de atribuições São combinações de operadores que simplificam as instruções e que geralmente são usados por programadores experientes. Dessa forma uma instrução escrita da forma: Var= var operador + expressão Pode ser reduzida obedecendo à sintaxe: Var operador= expressão Veja alguns exemplos utilizando duas variáveis (var e expr) que devem ser declaradas em seus programas. Instrução normal var = var + expr; Var=var – expr; Var=var/expr; Var=var*expr; Instrução reduzida var+=expr; Var-=expr; Var/=expr; Var*=expr; Operadores relacionais Esses operadores são responsáveis pelas comparações de expressões nos programas. A lista completa se encontra abaixo: Operador > >= < Descrição Maior Maior igual Menor <= == != Menor igual Igualdade Diferente Tabela – Operadores relacionais É importante distinguir (=) de (==). O primeiro atribui um valor e o segundo comprara expressões. O próximo exemplo demonstra a analise de algumas expressões retornando 0 para falso e 1 para verdadeiro. Esses dados são todos impressos na tela (veja a saída do programa). Saída do programa: Valor 0 indica expressão falsa e 1 expressao verdadeira. 98==10 é 0 98!=10 é 1 98<=10 é 0 98>=10 é 1 98<10 é 0 98 >10 é 1 Operadores lógicos Os operados lógicos servem para interligar mais de uma operação relacional. E assim como os relacionais retornam zero para falso e um para verdadeiro. Operador && || ! Descrição AND OR NOT (operador de negação) Tabela – Operadores lógicos Exemplo de utilização de operadores lógicos: Saída do programa: O número 76 esta entre 65 e 80 Nesse programa o operador lógico (&&) faz a ligação das operações relacionais (x>65) e (x<=80), verificando se o número dado (x) está entre essa faixa. A instrução if será estudada no próximo artigo. Operadores bit a bit Como já sabemos a linguagem C é considerada de baixo nível, pois permite a manipulação de bits. Isto é feito através dos operadores bit a bit listados a seguir. Operador & | ^ << >> Descrição AND OR XOR (OR exclusivo) Deslocamento para esquerda Deslocamento para direita Tabela – operadores bit a bit Embora a descrição na tabela seja parecida com as dos operadores Lógicos eles não devem ser confundidos. Os operadores bit a bit são muito usados em rotinas de modens e de impressoras. Operador Cast Tem como função forçar para que uma expressão seja de um determinado tipo. Sua sintaxe é: (tipo de dado) expressão O tipo de dado pode ser qualquer um dos definidos pelo padrão ANSI. Um exemplo da utilização deste operador pode ser visto no programa mostrado neste artigo para exemplificar o uso dos operadores aritméticos. Nesse programa o operador cast é usado para forçar a divisão de dois números inteiros ser do tipo float. Operador Sizeof Este operador é usado em tempo de execução e tem como objetivo retornar o tamanho em bytes da variável. Saída do programa: A variavel x do tipo float tem o tamanho=4 bytes A variavel y do tipo double tem o tamanho=8 bytes A variavel z do tipo char tem o tamanho=1 bytes Precedências Precedência é a prioridade com que os operadores são executados pelo compilador. Caso os operadores tenham o mesmo nível de precedência eles são analisados da esquerda para direita. Prioridades dos operadores aritméticos Alta Incremento(++), decremento (--) Menos unitário (-) Multiplicação(*), divisão(/), modulo(%) Baixa Soma(+), subtração(-) A precedência dos operadores pode ser mudada utilizando parentes. Para entender melhor veja o exemplo abaixo, onde as duas expressões são iguais, porém o uso de um parêntese fez mudar a precedência obtendo assim resultados diferentes. 4/2*5+1=11 4/2*(5+1)=12 Conclusão Conclui-se que os operadores são indispensáveis em nossos programas e que a linguagem C possui um número muito grande de operadores. Alguns inclusive serão mostrados mais adiante, por exemplo, os operadores de ponteiro, devido serem muito complexos.