Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Dada a expressão • Dada a expressão: a = 2 + (b = 3); – 1ª coisa a ser feita é a atribuição da constante 3 a variável b. – 2ª coisa a ser feita é a soma do conteúdo da variável b como o conteúdo da constante 2. – Por último, atribui-se a variável a o resultado da expressão 2 + (b = 3). O Bom Senso Recomenda • Reescrever a expressão a = 2 + (b = 3); • Em: – b = 3; – a = 2 + b; • Motivos: – Legibilidade do código fonte. – Redigibilidade do código fonte. – Facilitar a manutenção do código fonte. lvalue e rvalue • O operando a esquerda (lvalue – leftvalue) do operador de atribuição (=) sempre se refere a uma posição de memória. • O operando a direita (rvalue – rigthvalue) do operador de atribuição (=) sempre se refere a um valor. • a = b + 1 = c = 2 + 5; // erro b+1 retorna um valor e não um lvalue. Constantes • Referem-se aos valores fixos existentes no texto do códigos fontes dos programas. • São armazenados na memória durante a compilação (área de dados e área de código). Constantes • Constantes caractere. • Constantes caractere de barra invertida. • Constantes inteiras. • Constantes inteiras octais e hexadecimais. • Constantes de ponto flutuantes (reais). – Constantes de precisão simples (float). – Constantes de precisão dupla (double). • Constante string. Constantes Caractere • Trata-se de caracteres entre aspas simples. • ‘Z’, ‘9’, ‘%’ • unsigned char letra = ‘k’; • A posição de memória identificada por letra possui uma sequênica de bits que representa o código ASCII do caractere minúsculo k. Constantes Caractere de Barra Invertida • Constantes especiais para os caracteres de controle: beep, line feed, carriage return. • Deve-se utilizar código de barra invertida no lugar do código ASCII equivalente para aumentar a portabilidade dos programas. Constantes Caractere de Barra Invertida Código Significado \b Retrocesso (BS) \f Alimentação do formulário (FF) \n Nova linha (LF) \r Retorno de carro (CR) \t Tabulação (HT) \” “ \’ ‘ \0 Nulo \\ Barra invertida \v Tabulação vertical (VT) \a Alerta (beep) \N Constante octal, onde N é uma constante em octal \xN Constante hexadecimal, onde N é uma constante em hexadecimal Constantes Inteiras • Representada por números sem componentes fracionários. • O tipo de uma constante inteira é o menor tipo de dado capaz de armazená-la. – int, unsigned int, long int, unsigned long int • A menos que a constante venha acompanhada do sufixo que indique o seu tipo: – U – unsigned int – L – long int – UL – unsigned long int Exemplos e Constantes Inteiras Tipo Significado int 1 123 31000 -234 long int 35000L -34L unsigned int 10000U 977U 40000U unsigned long int 23454000UL 3000000UL Constantes Inteiras Octais e Hexadecimais • Muitas vezes é mais prático trabalhar com constantes hexadecimais e octais. • As constantes inteiras octais são precedidas por 0 (zero). – int a = 012 // a variável a recebe o valor decimal 10 • As constantes inteiras hexadecimais são precedidas por 0x. – int b = 0xA; // a variável a recebe o valor hexadecimal 10 Constantes Reais (Ponto Flutuante) • Possuem parte fracionária. • Existem dois tipos: – F – float – L – long double • Na falta de uma especificação assume-se que a constante é do tipo double. Constantes Reais (Ponto Flutuante) Tipo Significado float 12.34F 45F 1e-2F -2e1F double 12.34 45 1e-2 -2e1 long double 12.34LF 45LF 1e-2LF -2e1LF Constante String • São as constantes formadas por um conjunto de caracteres e sempre entre aspas duplas (“). • char codigo_disciplina*6+ = “DCC003”; Conversão de Tipos • Refere-se a situação em que variáveis de um tipo são misturadas com variáveis de outros tipos. • Regra de conversão: – O valor do lado direito (o lado da expressão) de uma atribuição é convertido no tipo do lado esquerdo (a variável destino). Conversão de um tipo short int para um tipo char • Perde-se os 8 bits mais significativos do tipo short int. • short int numero = 259; • char caractere = numero; • numero = 00000001 00000011 • caractere = 00000011 Conversão de tipos • Quando envolve caracteres e inteiros, os bits mais significativos sempre são perdidos dependendo do tamanho do tipo do lado esquerdo da atribuição. • A conversão de int em float, float em double por exemplo, não aumentam a precisão. Apenas mudam a forma de representação. Conversão de Tipos Tipo destino Tipo da expressão Possível informação perdida char unsigned char Se valor > 127, o destino é negativo char short int Os 8 bits mais significativos char unsigned short int Os 8 bits mais significativos char int Os 24 bits mais significativos char unsigned int Os 24 bits mais significativos char long Int Os 24 bits mais significativos char unsigned long int Os 24 bits mais significativos int float A parte fracionária e até mais int double A parte fracionária e até mais float double Precisão, o resultado é arredondado double long double Precisão, o resultado é arredondado Operadores • A linguagem C é rica em operadores. • Dá mais ênfase a operadores que outras linguagens de programação. • Existem operadores: – Aritméticos. – Relacionais. – Operadores de bits. • Além de outros operadores para tarefas particulares. Operadores Aritméticos Operador Descrição - Subtração + Adição / Divisão * Multiplicação % Resto da divisão de inteiros -- Decremento ++ Incremento Expressões Aritméticas • São expressões que possuem operandos que podem ser variáveis e/ou constantes e utilizam operadores aritméticos. • O resultado de uma expressão aritmética é um valor numérico. • Exemplos: – a + b * 10 – b++ – z * (10 + s) Expressões Aritméticas • Exemplo: a + b * 10 Operando variável Operador Operando constante Precedência dos Operadores Aritméticos Operador ++ -- * / % + - • A utilização de parênteses afeta a precedência dos operadores. Operadores de Incremento (++) e Decremento (--) • São operadores unários, atuam um operando. • Podem ser pré-fixados ou pós-fixados. – ++x – x++ – --a – a-- • Independente de pré-fixado ou pós-fixado, realizam o incremento ou decremento do conteúdo da variável em 1. Operador de Incremento e Decremento • Quando isolado em uma expressão a++; ↔ a = a + 1; ++a; ↔ a = a + 1; a-- ↔ a = a – 1; --a; ↔ a = a – 1; Operador de Incremento e Decremento • Quando não isolados em uma expressão. • Pós-fixada 1º usa o valor na expressão e depois incrementa. • Pré-fixada 1º incrementa e depois usa o valor na expressão. a = 2; x = 5 + a++; x = 5 + a; a++; a = 2; x = 5 + ++a; a++; x = 5 + a; Avaliação do Tipo do Resultado de uma Expressão Aritmética char chr; int int_32; float dec_32 double dec_64 double resultado; Resultado = (chr/int_32) + (dec_32*dec_64) - (dec_32+int_32); int double float double double Avaliação de uma Expressão Aritmética int x = 5; double z; z = x / 2; • Qual é o valor armazenado em z? Avaliação de uma Expressão Aritmética int x = 5; double z; z = x / 2.0; • 2.0 informa para o compilador que é uma constante do tipo double. • (double) x é um typecast e informa para o compilador que a variável x é um double na expressão. • Portanto o resultado da expressão é um double. int x = 5; double z; z = (double) x / 2;