(Parte 3 de 10)

#define PI 3,1415926536 #define ARQUIVO “lixo.dat”

Observe que na definição de uma constante não há o “;” no final. Se for colocado, este fará parte do valor associado à constante. Veja exemplos a seguir:

/*Código digitado-programador*/

#define PI 3,1415926536 #define ARQUIVO “lixo.dat”

#define SOMA 100+120; M a = PI; printf(“%s\n”, ARQUIVO); x = SOMA; M

/*Código que será compilado, depois do pré-processador do C resolver as constantes*/ M a = 3,1415926536; printf(“%s\n”, “lixo.dat”); x = 100+120;;

/*Erro na linha acima!!!!!*/

Pelo exemplo fica claro como o C trata um constante. Como foi colocado um “;” no final da constante SOMA, esta passa a ser parte do valor da mesma, causando um erro na penúltima linha do código, erro que será difícil descobrir, pois, a primeira vista, esta linha está perfeita (o compilador C informará o erro existente na penúltima linha e não na definição de constantes). Muito cuidado com o uso de constantes no C (assim como em outras linguagens).

2.4.1 CONSTANTES HEXADECIMAIS E OCTAIS

Em programação algumas vezes é comum usar um sistema de numeração baseado em 8 ou 16 em vez de 10. O sistema numérico baseado em 8 é chamado octal e usa os dígitos de 0 a 7. Em octal, o número 10 é o mesmo que 8 em decimal. O sistema numérico de base 16 é chamado hexadecimal e usa os dígitos de 0 a 9 mais as letras de A até F, que equivalem a 10, 1, 12, 13, 14 e 15. Por exemplo, o número hexadecimal 10 é 16 em decimal. Por causa da freqüência com que estes dois sistemas numéricos são usados, a linguagem C permite que você especifique constantes inteiro em hexadecimal ou octal em vez de decimal, se preferir. Uma constante hexadecimal deve começar com “0x” (um zero seguido de um x), seguido pela constante em formato hexadecimal. Uma constante octal começa com um zero. Aqui estão alguns exemplos:

hex = 0xFF; /* 255 em decimal */ oct = 011; /* 9 em decimal */

2.4.2 CONSTANTES STRING

A linguagem C suporta outro tipo de constante em adição àquelas dos tipos predefinidos: a string. Uma string é um conjunto de caracteres entre aspas. Por exemplo, “este é um teste” é uma string.

Não confunda strings com caractere. Uma constante caractere simples fica entre dois apóstrofos, por exemplo ‘a’. Entretanto “a” é uma string que contém somente uma letra.

2.4.3 CÓDIGOS DE BARRA INVERTIDA

Colocar todas as constantes caractere entre aspas funciona para muitos caracteres, mas alguns, como o retorno de carro, são impossíveis de serem inseridos em uma string a partir do teclado. Por isso, a linguagem C fornece constantes caractere mais barra invertida especiais. Estes códigos são mostrados na tabela a seguir.

Código Significado

Retrocesso Alimentação de formulário Nova linha Retorno de carro Tabulação horizontal Aspas Apóstrofo Nulo Barra invertida Tabulação vertical Sinal sonoro Constante octal Constante hexadecimal

Você usa um código de barra invertida exatamente da mesma maneira como usa qualquer outro caractere. Por exemplo:

ch = ‘\t’; printf (“este é um teste\n”);

Esse fragmento de código primeiro atribui uma tabulação a ch e, então, imprime “este é um teste” na tela, seguido de uma nova linha.

2.5 OPERADORES

A linguagem C é muito rica em operadores internos. Um operador é um símbolo que diz ao compilador para realizar manipulações matemáticas e lógicas específicas. A linguagem C possui três classes gerais de operadores: aritméticos, relacionais e lógicos e bit-a-bit.

2.5.1 OPERADOR DE ATRIBUIÇÃO

O operador “=“ atribui um valor ou resultado de uma expressão contida a sua direita para a variável especificada a sua esquerda. Exemplos:

a = 10; b = c * valor + getval(x); a = b = c = 1; /*Aceita associação sucessiva de valores*/

2.5.2 OPERADORES ARITMÉTICOS

Operam sobre números e expressões, resultando valores numéricos.

soma subtração multiplicação divisão módulo da divisão (resto da divisão inteira) sinal negativo (operador unário)

2.5.3 OPERADORES RELACIONAIS

Operam sobre expressões, resultando valores lógicos de TRUE ou FALSE.

Operador Ação

Maior maior ou igual Menor menor ou igual Igual não igual (diferente)

Cuidado! Não existem os operadores relacionais: “=<“, “=>“ e “<>“. Não confunda a atribuição (“=“) com a comparação (“==“).

2.5.4 OPERADORES LÓGICOS

Operam sobre expressões, resultando valores lógicos de TRUE ou

FALSE. Possuem a característica de “short circuit”, ou seja, sua execução é curta e só é executada até o ponto necessário.

Operador Ação operação AND operação OR operador de negação NOT (operador unário)

Exemplos de “short circuit”:

(a == b) && (b == c) /*Se a != b não avalia o resto da expressão*/ (a == b) || (b == c) /*Se a == b não avalia o resto da expressão*/

2.5.5 MANIPULAÇÃO DE BITS

A manipulação é feita em todos os bits da variável a qual não pode ser do tipo float ou double.

Operador Ação bit and bit or bit xor - exclusive or shift left shift right bit not (complemento)

Observação: x << n irá rotacionar n vezes a variável x à esquerda.

2.5.6 OPERADORES DE ASSINALAMENTO

var = var op exprà var op= expr

É expresso da seguinte forma: (operadores combinados)

Onde tempos op como um dos seguintes operadores:

Operador Ação soma subtração multiplicação divisão módulo (resto da divisão) shift right shift left and xor - exclusive or or

Exemplo de aplicação:

i += 2; /* É equivalente a: i = i + 2 */ j -= 3; /* É equivalente a: j = j – 3 */ k >>= 3; /* É equivalente a: k = k >> 3; z &= flag; /* É equivalente a: z = z & flag;

(Parte 3 de 10)

Comentários