• Nenhum resultado encontrado

Aula05-VariáveiseTiposdeDados

N/A
N/A
Protected

Academic year: 2021

Share "Aula05-VariáveiseTiposdeDados"

Copied!
12
0
0

Texto

(1)

Microcontroladores

Prof. Eng. Derig Almeida Vidal

Mestre em Computação Aplicada, Engenheiro de Produção e Tecnólogo em Automática

Aula 05

Variáveis e Tipos de Dados

Prof. Derig Almeida Vidal, MsC

Sumário

• Tipos Básicos de Dados Disponíveis

• Modificadores de Tipo • Outros tipos específicos do

compilador CCS C • Declaração de Variáveis • Variáveis Locais

• Códigos de Barra Invertida

• Constantes binárias, hexadecimais e octais • Operadores • Expressões • Conversão de tipos • Alocação de Memória • Redefinindo tipos de dados • Exercícios

Tipos Básicos de Dados Disponíveis

Tipos de dados

Tamanho em

bits Descrição Exemplo

int 8 variáveis inteiras sem sinal, capacidade de 0 a 255

int X, Y=1, VAR1=0;

signed int 8 variáveis inteiras com sinal,

capacidade de –128 a 127 signed int VAR3 = -10; long 16 variáveis inteiras sem sinal,

capacidade de 0 a 65535 long A, B = 0, VAR2; signed long 16 variáveis inteiras com sinal, capac.

de –32768 a 32767 signed long GRAU=0; float 32 variáveis reais com sinal.

3.4 x 10-34a 3.4 x 1034 float VAR4, VAR5; short

ou boolean

1 variáveis lógicas, de um bit, podendo valer 0 ou 1

boolean FLAG1=0, SENSOR; short CHAVE;

Tipos Básicos de Dados Disponíveis

Tipos de dados

Tamanho em

bits Descrição Exemplo

int32 32

variáveis inteiras sem sinal, podendo valer de 0 a

4294967295

int32 CONTADOR;

signed int32 32

variáveis inteiras com sinal, podendo armazenar valores

de -2147483648 a 2147483647 signed int32 VAR10;

Char 8 variáveis que armazenam caracteres em forma de bytes.

char C = ‘a’, LETRA = ‘ ‘, H;

(2)

Prof. Derig Almeida Vidal, MsC

Tipos Básicos de Dados Disponíveis

• char (Caracter): O valor armazenado é um caractere.

• Caracteres geralmente são armazenados em códigos, usualmente o código ASCII, com 8 bits para cada um.

Prof. Derig Almeida Vidal, MsC

Código ASCII

Prof. Derig Almeida Vidal, MsC

Tipos Básicos de Dados Disponíveis

• int: utilizado para representar números inteiros de 8 bits (0 a 255).

• float (ponto flutuante): utilizado para representar

grandezas compreendidas entre 3,4-38e 3,4+38,

tanto para números fracionários como inteiros (os reais). Faz uso de 32 bits (4 posições na memória RAM) e para seu tratamento são necessários comandos complexos, desta forma devem ser utilizados com de forma cautelosa.

• void: utilizado em funções que não retornam valor algum.

Prof. Derig Almeida Vidal, MsC

Modificadores de Tipo

• Além dos tipos de dados básicos podemos utilizar

modificadores para obtermos outros tipos de

dados. São eles: – signed

– unsigned – short – long

(3)

Prof. Derig Almeida Vidal, MsC

Modificadores de Tipo - signed

• Modifica um tipo base de dados de forma que possa representar números positivos e negativos. • Para isso é utilizado o MSB (Most Significant Bit ou

bit mais significativo) para representar o sinal do número, sendo:

– 1 para negativo; e, – 0 para positivo.

• É conhecido como complemento de 2, onde seu valor é complementado (bits invertidos um a um) e somado 1 ao resultado

Prof. Derig Almeida Vidal, MsC

Modificadores de Tipo - signed

• Como o é utilizado um bit para o sinal, a magnitude absoluta de representação do tipo modificado será a metade da magnitude do tipo não modificado. • Ex:

– int pode representar de 0 a 255;

– signed int pode representar de -128 a +127

Modificadores de Tipo - unsigned

• Define um tipo de dado sem sinal (é o padrão do compilador CCS).

• Ex:

– int pode representar de 0 a 255;

– unsigned int pode representar de 0 a 255, também.

Modificadores de Tipo - short

• Define uma variável com tamanho menor que o tipo modificado, ou seja, a versão reduzida do tipo especificado.

• Ex:

– int utiliza 8 bits (representando de 0 a 255); – short int utiliza 1 bit (representando apenas o 0

ou o 1), é também chamado de flag ou sinalizador.

(4)

Prof. Derig Almeida Vidal, MsC

Modificadores de Tipo - long

• Amplia a magnitude de representação do tipo especificado.

• Ex:

– int utiliza 8 bits (representando 256 valores); – long int utiliza 16 bit (representando 65536

elementos), é também chamado de flag ou sinalizador.

Prof. Derig Almeida Vidal, MsC

Outros tipos específicos do

compilador CCS C

• Encontramos no compilador CCS C outros tipos de dados, criados especificamente para a eficiência e compatibilidade do compilador junto a dispositivos como os PICs.

• São eles:

– int1: especifica valores de 1 bit (equivale ao short int);

– boolean: especifica valores booleanos de bit (equivale ao short int e int1);

– int8: especifica valores de 8 bits (equivalente ao int);

Prof. Derig Almeida Vidal, MsC

Outros tipos específicos do

compilador CCS C

– byte: especifica valores de 8 bits (equivale ao int e int8);

– int16: especifica valores de 16 bits (equivale ao long int);

– int32: especifica valores de 32 bits;

Prof. Derig Almeida Vidal, MsC

Outros tipos específicos do compilador CCS C Tipo Tamanho em Bits Faixa de Valores

short int, int1, boolean 1 0 ou 1

char 8 0 a 255

signed char 8 -128 a 127

unigned char 8 0 a 255

int, int8, byte 8 0 a 255

signed int, signed byte 8 -128 a 127

unsigned int, unsigned 8 0 a 255

long int, int16 16 0 a 65.535

signed long int 16 - 32.768 a 32.767 unsigned long int 16 - 32.768 a 32.767

int32 32 0 a 4.294.967.295

signed int32 32 -2.147.483.648 a 2.147.483.647

unsigned int32 32 0 a 4.294.967.295

(5)

Prof. Derig Almeida Vidal, MsC

Declaração de Variáveis

• Em C é necessário declarar a variável antes de poder usá-la.

• A declaração informa ao compilador que uma variável X é do tipo Y.

• O nome deve conter 31 caracteres e não pode iniciar com número.

• Podemos declarar da seguinte forma:

– TIPO nome_da_variavel{,outras_variaveis}; – TIPO nome_da_variavel =

valor_da_variavel{,outras_variaveis};

Prof. Derig Almeida Vidal, MsC

Declaração de Variáveis

• Ex:

– unsigned int tempo; // Declaramos a variável tempo

– int tempo; // Declaramos a variável

tempo

– int tempo = 10; // Declaramos e inicializamos

a variável tempo

Constantes

• São valores (numéricos ou não) fixos e que não podem ser alterados pelo programa durante a sua execução;

• Na declaração é informado apenas o nome e o valor. Ex:

const val1 = 10; const val2 = -5; const val3 = 55.12; const val4 = ‘a’;

Constantes binárias, hexadecimais e

octais

• A linguagem C prevê a capacidade de manusear dados numéricos nas bases binária, octal, decimal e hexadecimal. Ex: int valor; valor = 50; valor = 050; valor = 0x50; valor = 0b01010000;

Valor Base Numérica

99 Decimal

099 Octal

0x99 Hexadecimal 0b10011001 Binário

(6)

Prof. Derig Almeida Vidal, MsC

Operadores

• Adiantando, o C possui diversos operadores, sejam eles:

– Aritméticos (soma (+), subtração (-),

multiplicação (*), divisão (/), resto da divisão (%), incremento (++) e decremento (--));

– Lógicos e relacionais (maior (>), menor(<), igual (==), diferente (!=), AND (&&) OR (||)); e, – Muitos outros.

Prof. Derig Almeida Vidal, MsC

Expressões

• São elementos formados pela união de variáveis, constantes e operadores entre si.

• Seguem as mesmas regras gerais das expressões algébricas em matemática.

• Ex:

custo = valor; a = b + 1; teste * 3;

Prof. Derig Almeida Vidal, MsC

Expressões

• Também é possível a utilização de expressões condicionais.

• Ex: int x,y; x = 10;

y = (x>5) * 10;

• No exemplo se x for maior que 5, y será igual a 10, pois quando o resultado é verdadeiro, é assumido o valor de 1, se falso é 0 (o que resultaria em y=0).

Prof. Derig Almeida Vidal, MsC

Expressões

• Outra característica importante é que não existe a verificação de tipos. • Ex: unsigned int8 a; unsigned int16 b; unsigned int32 c; b = 300; c = 100000;

a = c – b; // a possui 8 bits e o resultado 116 • Em outras linguagens essa operação geraria um

(7)

Prof. Derig Almeida Vidal, MsC

Expressões

• Como o a possui apenas 8 bits, ele não dispõe de capacidade para armazenar c – b que resulta no valor 99700 (valor de 17 bits).

• A ferramenta que torna esta operação possível é chamada de conversão de tipos.

• Ex:

O resultado 99700 precisa de 17 bits mas é armazenado utilizando 32, veja:

99700 = 00000000 00000001 10000101 01110100

É convertido em um valor com apenas 8 bits:

116 = 01110100

Prof. Derig Almeida Vidal, MsC

Conversão de tipos

• Sempre que tivermos uma expressão composta de tipos diferentes entre si, será aplicada a conversão de tipos.

• As regras de conversão são:

– Em uma atribuição, o tipo do dado resultante da expressão é convertido no tipo de dado da variável que recebe a atribuição;

– Todos os tipos short int e char são convertidos no seu tipo base imediatamente superior, ou seja, int; – Cada par de operandos de tipos diferentes é

convertido no tipo base do tipo superior;

Conversão de tipos

Tipo da expressão

Tipo da

variável alvo Resultado

short int char, int, long

int ou int32 Somente o bit 0 é utilizado; os outros bits são zerados char, int, long

int ou int32

short int O bit 0 do resultado da expressão é

armazenado na variável; os outros bits são descartados.

char ou int long int ou

int32 O byte LSB da variável; assume o resultado da expressão; a parte MSB é zerada.

long int ou int32 char ou int Os 8 bits menos significativos do resultado da expressão são

armazenados na variável; os outros bits são descartados.

Conversão de tipos

Tipo da expressão

Tipo da

variável alvo Resultado

int32 long int Os 16 bits menos significativos do

resultado da expressão são

armazenados na variável; os demais bits são descartados.

int32 float O valor da expressão é truncado para o

armazenamento na variável float; possível perda da dados.

float short int O bit menos significativo da parte inteira

do resultado da expressão é armazenado na variável.

float char ou int Os 8 bits menos significativos da parte

inteira do resultado da expressão são armazenados na variável.

(8)

Prof. Derig Almeida Vidal, MsC

Conversão de tipos

Tipo da expressão

Tipo da

variável alvo Resultado

float Long int Os 16 bits menos significativos da parte

inteira do resultado da expressão são armazenados na variável.

float int32 A parte inteira do resultado da expressão

e armazenada na variável.

Signed Unsigned Se o resultado da expressão for

negativo, o resultado será maior que o módulo do resultado.

Unsigned Signed Se o resultado da expressão for maior

que o extremo de faixa do tipo, o resultado será negativo.

Prof. Derig Almeida Vidal, MsC

Conversão de tipos

• No caso de uma operação envolvendo dois tipos diferentes, o tipo de menor ordem será convertido no tipo de maior ordem, conforme esta seqüência:

float int32

long int ou int16 char, int ou int8 short int ou int1 Maior Ordem

Menor Ordem

Prof. Derig Almeida Vidal, MsC

Conversão de tipos

• Ex: int x,y; long z; x = 5; z = 1000;

y = x + z; // o resultado será igual a 237 decimal

• x + z resulta em um tipo long que depois é convertido no mesmo tipo de y (ou seja, int), provocando a truncagem dos 8 bits mais significativos.

Prof. Derig Almeida Vidal, MsC

Conversão de tipos

• Ex: float a,b; int c; long d; int32 e; a = 5.5; c = 10; d = 330; e = 100000;

b = ((e / d) + c) * a; // o resultado b será 1721.5

(9)

Prof. Derig Almeida Vidal, MsC

Conversão de tipos

• É possível forçar uma expressão a ser de um tipo específico usando-se uma construção chamada de modelador.

• A forma geral de um modelador é: (novo_tipo) expressão

• Ex:

X / 2; // o resultado será tipo int

(float) (x / 2); // o resultado será tipo float

Prof. Derig Almeida Vidal, MsC

Conversão de tipos

• Erro comum: long x; int y; y = 10; x = y * 100; // o resultado em x será 232

• A multiplicação de y (8 bits) por 100 (8 bits) produz outro resultado de 8 bits.

• Depois é convertido em um de 16 bits e armazenado em x.

Conversão de tipos

• Resolvendo: long x; int y; y = 10;

x = (float) (y * 100); // o resultado em x será 1000

Conversão de tipos

• Erro comum: long x,y; float z; y = 11; x = 2; z = 10 + (y / x); // o resultado será 15

(10)

Prof. Derig Almeida Vidal, MsC

Conversão de tipos

• Resolvendo: long x,y; float z; y = 11; x = 2;

z = 10 + ((float) y / x); // o resultado será 15,5

Prof. Derig Almeida Vidal, MsC

Alocação de Memória

• Cada vez que declaramos uma variável o

compilador irá reservar um ou mais endereços de memória RAM de forma a armazenar a variável. • As variáveis do tipo inteiro são armazenados

iniciando-se pela parte menos significativa (LSB) para a parte mais significativa.

• Ex: para o valor: 0x12345678 Endereço Conteúdo 0x20 0x78 0x21 0x56 0x22 0x34 0x23 0x12

Prof. Derig Almeida Vidal, MsC

Alocação de Memória

• No caso de variáveis tipo float o formato utilizado é o ponto flutuante adotado pela Microchip.

• Onde:

– eb é o expoente do número somado com 127; – s é o bit de sinal;

– f0, f1 e f2 armazenam a parte fracionária do número; – y é o bit LSB do expoente eb.

Formato eb f0 f1 f2

IEEE754 sxxx xxxx y.xxx xxxx xxxx xxxx xxxx xxxx Microchip xxxx xxxx s.xxx xxxx xxxx xxxx xxxx xxxx

Prof. Derig Almeida Vidal, MsC

Redefinindo tipos de dados

• A linguagem C ainda provê um comando que permite definir novos nomes para os tipos de dados existentes.

• A sua forma geral é:

typedef tipo novo_nome

• Ex:

typedef float fracao; fracao variavel;

(11)

Prof. Derig Almeida Vidal, MsC

Exercícios

1. Quais os tipos de dados básicos na linguagem C? 2. Qual é a diferença entre os tipos short int e int1? 3. Qual é a diferença entre uma variável signed e

outra unsigned?

4. Qual é a magnitude de armazenamento do tipo long int?

Prof. Derig Almeida Vidal, MsC

Exercícios

5. Suponha que o valor -1 é armazenado em uma variável do tipo signed int e em um determinado ponto do programa essa variável é atribuída a outra do tipo unsigned int. Qual é o valor efetivamente armazenado na variável?

Exercícios

6. Qual é o resultado armazenado na variável “x” no programa a seguir? int x,y; long int z; z = 0x1234; y = z + 1; x = y + 1;

Exercícios

7. Qual é o resultado armazenado na variável “z” no programa a seguir? int x; long int y; float z; x = 110; y = 300; z = y / x;

(12)

Prof. Derig Almeida Vidal, MsC

Bibliografia

• PEREIRA, Fábio. Microcontroladores PIC:

Referências

Documentos relacionados

em prótese dentária sobre o tempo de duração tempo de duração de de trabalhos protéticos:?. trabalhos protéticos: aspectos aspectos éticos éticos e e

O processo seletivo será realizado através da avaliação do desempenho escolar da pessoa inscrita, para isso se faz necessário o cadastro do boletim escolar

· Indicações sobre cuidados médicos urgentes e tratamentos especiais necessários Não existe mais nenhuma informação relevante disponível.. 5 Medidas de combate

Biológico, São Paulo, v. Efeito do sistema de preparação do solo e da diversificação de gramíneas sobre a população adulta de Atarsocoris brachiariae Becker, 1996. Efeito do

A certificação das entidades beneficentes de assistência social e a consequente isenção de contribuições para a seguridade social serão concedidas às pessoas

The sciatic nerve of rats is a reliable model for studying different kinds of injuries and treatment methods, with crushing injuries being one of the preferred types,

estação de referência coletando dados, enquanto um outro percorre as estações de interesse, onde permanece parado entre 5 a 20 min para coletar dados. Método

ao Brasil, encontraram vários povos que aqui habitavam, dentre eles os tupis, os jês, os karib e os Aruak. Corresponde a uma de suas características gerais. a) Assim