Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
1 Profa. Maria Aparecida Reis Profa. Daniela Resende Silva Prof. Rafael Godoi Orbolato Operadores 1 O que é uma expressão em C Uma expressão é um arranjo válido de variáveis, constantes e operadores Em C, cada expressão é avaliada para um valor de um dado tipo de dado Exemplo: Expressão: 9 + 5 Valor: 14 Tipo: inteiro 2 Operadores podem ser do tipo: Binário: envolve 2 operandos Ex: 2 + 3 Unário: envolve 1 operando Ex: -3 3 Exemplo de operadores em C Operador Descrição ( ) Chamada de Função + Positivo - Negativo * Multiplicação / Divisão % Modulo (resto da divisão) + Adição - Subtração = Atribuição 4 Alguns operadores em C - (subtração) + (soma) 4 % / * (multiplicação) 3 & (endereço de) * (de referência) - (unário) -- ++ ~ ! 2 .* ->* . -> [] () 1 Operadores Precedência 5 Algumas definições: A Precedência determina qual operador será aplicado primeiro numa expressão que possua vários operadores Associatividade da esquerda para direita significa que numa expressão com dois ou mais operadores com a mesma prioridade, o operador mais a esquerda é aplicado primeiro Ex: Os operadores * , / , % , + , - 9 - 5 - 1 ( 9 - 5 ) - 1 4 - 1 3 6 Exemplo de uma expressão 7 * 10 - 5 % 3 * 4 + 9 (7 * 10) - 5 % 3 * 4 + 9 70 - 5 % 3 * 4 + 9 70 - (5 % 3) * 4 + 9 70 - 2 * 4 + 9 70 - ( 2 * 4 ) + 9 70 - 8 + 9 ( 70 - 8 ) + 9 62 + 9 71 7 Uso dos parênteses Parênteses podem ser usados para mudar o ordem/prioridade usual dos operadores As partes dentro de ( ) serão avaliadas primeiro Por exemplo: (7 * (10 - 5) % 3) * 4 + 9 ( 7 * 5 % 3 ) * 4 + 9 ( 35 % 3 ) * 4 + 9 2 * 4 + 9 8 + 9 17 8 Operador Divisão O resultado de uma operação de divisão depende do tipo dos operandos Se um ou dois operandos forem do tipo real (float), o resultado da divisão é também real. Caso contrário o resultado será inteiro Exemplos: 11 / 4 resulta em 2 11.0 / 4.0 resulta em 2.75 11 / 4.0 resulta em 2.75 OBS O operador de divisão é “overloaded”, isto é, o mesmo operador é utilizado para dois tipos diferentes de divisão: inteira e real 9 Operador Módulo O operador módulo % pode ser usado somente com operandos inteiros e sempre produz um resultado do tipo inteiro O resultado é o resto de uma divisão inteira Ex: 5 % 4 resulta em 1 9 % 4 resulta em 1 6 % 4 resulta em 2 10 Operador Incremento (++) int idade; idade = 8; idade++; 8 idade 9 idade int idade; idade = 8; ++idade; 8 idade 9 idade int idade; idade = 8; idade=idade+1; 8 idade 9 idade 11 Operador Decremento (--) int idade; idade = 8; idade--; 8 idade 7 idade int idade; idade = 8; --idade; 8 idade 7 idade int idade; idade = 8; idade=idade-1; 8 idade 7 idade 12 Qual a diferença da forma pré e pós fixa dos operadores -- e ++ ? Quando os operadores de decremento e incremento são usados sozinhos numa linha de comando, a forma pré e pós fixas são idênticas Entretanto, quando os operadores -- e ++ são usados numa expressão com outros operadores, o resultado das formas pré e pós fixas podem ser diferentes 13 In/Decremento nas formas Pré e Pós Fixa int alpha ; int num ; num = 13; alpha = ++num * 3; 13 num ? alpha 14 num 14 num 42 alpha int alpha ; int num ; num = 13; alpha = num++ * 3; 13 num ? alpha 13 num 14 num 39 alpha ? alpha ? alpha Primeiro incrementa e depois realiza a multiplicação Primeiro realiza a multiplicação e depois incrementa 14 Tipo de dado Boolean (bool) Em C não temos o tipo de dado bool. Em C, o valor zero representa falso e qualquer valor diferente de zero representa verdadeiro Ex. ... int booleano; booleano = 0; ... (booleano) ... //equivalente a false. booleano = 1; ... (booleano) ... //equivalente a true. (poderia ser 1000). ... 15 Expressões Lógicas São expressões compostas por: Expressões aritméticas seguidas de operadores relacionais, Valores ou variáveis lógicas seguidas de operadores lógicos Expressões Lógicas, quando avaliadas, retornam verdadeiro (true) ou falso (false) 16 Operadores Relacionais São os operadores utilizados para comparar duas expressões. Operadores relacionais testam a relação entre dois valores > Maior que < Menor que >= Maior que ou igual <= Menor que ou igual == Igual != Diferente Cuidado! É comum confundir o operador = de atribuição com o operador == de comparação 17 Exemplo de Operadores Relacionais 18 Operadores Relacionais O programador deve ter cuidado quando estiver comparando tipos distintos de dados Se o programador comparar tipos distintos de dados (como int e float), uma conversão implícita acontecerá na variável bool int umaVarInteira = 5; float umaVarFloat = 5.5; bool resultado; ... ... resultado = umaVarInteira >= umaVarFloat; A variável umaVarInteira será convertida para float antes da comparação 19 Operadores Relacionais Observe o valor retornado pelas seguintes comparações: (‘0’ < ‘9’) true (0 < 9) true (‘0’ < 9) false Qual o motivo para que esta última comparação seja false? 20 Mais Exemplos de Operadores Relacionais int x, y ; x = 4; y = 6; EXPRESSÃO VALOR x < y true x + 2 < y false x != y true x + 3 >= y true y == x false y == x+2 true y = x + 3 7 (true) 21 Operadores Lógicos São 3 os operadores Lógicos: 2 binários E (&&) OU (||) 1 unário Negação (!) 22 Resumo dos Operadores Relacionais e Lógicos 6 Operadores Relacionais < <= > >= == != 3 Operadores Lógicos ! && || 23 Precedência dos Operadores Lógicos e Relacionais 24 Exemplo O programa abaixo está correto? Ele imprimirá ou não a mensagem “O Ar está saudável”? int qualidadeDoAr ; qualidadeDoAr = 35 ; if (50 < qualidadeDoAr < 80) printf (“O Ar está saudável“); (50 < qualidadeDoAr < 80) equivale a ((50 < qualidadeDoAr) < 80) (false < 80) (0 < 80) true 25 Correção do Programa anterior int qualidadeDoAr ; qualidadeDoAr = 35 ; if ((50 < qualidadeDoAr) && (qualidadeDoAr < 80)) printf (“O Ar está saudável“); 26 Avaliação Preguiçosa C faz avaliação preguiçosa de expressões lógicas Isto significa que uma expressão lógica é avaliada da esquerda para a direita. A avaliação termina assim que o valor da expressão pode ser determinado 27 Avaliação Preguiçosa int idade; float altura; idade = 25; altura = 1.80; EXPRESSÃO (idade > 50) && (altura > 1.75) false A avaliação da expressão termina ao avaliar (idade > 50) pois o operador && requer que ambos operandos sejam verdadeiro. Se um deles é falso, então o resultado de && também será falso e não se faz necessário avaliar (altura > 1.75) 28 Avaliação Preguiçosa int idade; float altura; idade = 25; altura = 1.80; EXPRESSÃO (altura > 1.75) || (idade > 40) true A avaliação da expressão termina ao avaliar (altura > 1.75) pois o operador || requer que pelo menos um dos operandos seja verdadeiro. Neste caso, como um deles já é verdadeiro, não há necessidade de continuar a avaliação da expressão 29 Benefícios da Avaliação Preguiçosa A primeira parte de uma expressão lógica/Booleana pode ser avaliada primeiramente para “prevenir” erros de avaliação de um operador/operando não muito seguro O programa não perde tempo de execução avaliando parte complexa de uma expressão quando o resultado já é conhecido 30 Exemplo int numero; float x; (0 != numero) && ( x < 1 / numero) Esta primeira parte é avaliada primeiro Graças à Avaliação Preguiçosa, o lado direito da expressão não será executado quando o número for zero, evitando assim erro de execução causado por divisão por zero 31 Declaração int idade = 9; Expressão Resultado (idade > 9) false (idade < 9) false (idade >= 9) true (idade <= 9) true Operador Descrição Associatividade Maior Prioridade :: () Resolução de escopo Chamada de função Esquerda p/ Direita Unários !, +, - Negação, sinal pos e neg Direita p/ Esquerda Multiplicativo * / % Multi/Divisão/Resto Esquerda p/ Direita Aditivo + - Soma e Subtração binária Esquerda p/ Direita Entrada/Saída >> << Extração / Inserção Esquerda p/ Direita Relacional < > <= >= Menor/Maior Menor/Maior ou igual Esquerda p/ Direita Igualdade == != Igual, Diferente Esquerda p/ Direita E && E lógico Esquerda p/ Direita OU ¦¦ OU lógico Esquerda p/ Direita Atribuição = Atribuição de expressão Direita p/ Esquerda
Compartilhar