• Nenhum resultado encontrado

Aula09-VariáveiseTiposdeDados

N/A
N/A
Protected

Academic year: 2021

Share "Aula09-VariáveiseTiposdeDados"

Copied!
13
0
0

Texto

(1)

IFCE – Campus Cedro

Mecatrônica Microcontroladores

Prof. Eng. Derig Almeida Vidal

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

Aula 09

Variáveis e Tipos de Dados

Prof. Derig Almeida Vidal IFCE - Cedro

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

Prof. Derig Almeida Vidal IFCE - Cedro

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 IFCE - Cedro

(2)

Prof. Derig Almeida Vidal IFCE - Cedro

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 IFCE - Cedro

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

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

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;

(3)

Prof. Derig Almeida Vidal IFCE - Cedro

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.

Prof. Derig Almeida Vidal IFCE - Cedro

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.

Prof. Derig Almeida Vidal IFCE - Cedro

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 IFCE - Cedro

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);

(4)

Prof. Derig Almeida Vidal IFCE - Cedro

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 IFCE - Cedro

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

float 32 3.4-38a 3.4+38

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};

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

(5)

Prof. Derig Almeida Vidal IFCE - Cedro

Regras de escopo da linguagem

• Uma variável pode ser declarada em três pontos distintos do programa:

– No corpo principal do programa: fora de qualquer função, inclusive da main() são chamadas de globais e podem ser acessadas de qualquer ponto do programa;

– Dentro de uma função: incluindo a função main() somente podem ser acessadas de dentro da função em que foram declaradas (são chamadas de locais). No momento em que ocorre o retorno da função elas são descartadas;

– Como parâmetro formal de uma função: são um tipo especial de variável local;

Prof. Derig Almeida Vidal IFCE - Cedro

Ex:

#include <16f628a.h>#use delay(clock=4000000)

#fuses HS,NOWDT,PUT,NOBROWNOUT,NOMCLR,NOLVP #use rs232(baud=2400, xmit=PIN_B2, rcv=PIN_B1) int somatorio;

void soma(int valor) {

int conta;

somatorio = somatorio + valor; printf("A soma de 0");

for (conta=1;(conta<(valor+1));conta++) printf("+%u",conta); printf("e igual a %u\r\n",somatorio);

} void main() {

int conta=12; somatorio = 0;

for (conta=0; conta<20; conta++) { soma(conta); } } Variável Global Variável Local Variável de Parâmetro

Prof. Derig Almeida Vidal IFCE - Cedro

No Proteus

Prof. Derig Almeida Vidal IFCE - Cedro

Resultado

A soma de 0e igual a 0 A soma de 0+1e igual a 1 A soma de 0+1+2e igual a 3 A soma de 0+1+2+3e igual a 6 A soma de 0+1+2+3+4e igual a 10 A soma de 0+1+2+3+4+5e igual a 15 A soma de 0+1+2+3+4+5+6e igual a 21 A soma de 0+1+2+3+4+5+6+7e igual a 28 A soma de 0+1+2+3+4+5+6+7+8e igual a 36 A soma de 0+1+2+3+4+5+6+7+8+9e igual a 45 A soma de 0+1+2+3+4+5+6+7+8+9+10e igual a 55 A soma de 0+1+2+3+4+5+6+7+8+9+10+11e igual a 66 A soma de 0+1+2+3+4+5+6+7+8+9+10+11+12e igual a 78 A soma de 0+1+2+3+4+5+6+7+8+9+10+11+12+13e igual a 91 A soma de 0+1+2+3+4+5+6+7+8+9+10+11+12+13+14e igual a 105 A soma de 0+1+2+3+4+5+6+7+8+9+10+11+12+13+14+15e igual a 120 A soma de 0+1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16e igual a 136 A soma de 0+1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17e igual a 153 A soma de 0+1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18e igual a 171 A soma de 0+1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19e igual a 190

(6)

Prof. Derig Almeida Vidal IFCE - Cedro

#use

#use rs232(baud=2400, xmit=PIN_B2, rcv=PIN_B3) • A diretiva rs232 é utilizada para ordenar ao

compilador que gere um código para comunicação serial utilizando uma interface serial assíncrona padrão rs232.

• Os parâmetros são os seguintes (respectivamente): – Velocidade de comunicação em bps;

– Pino de saída dos dados transmitidos; – Pino de entrada dos dados recebidos.

Prof. Derig Almeida Vidal IFCE - Cedro

Variáveis Locais

• São aquelas declaradas dentro de um bloco de código; int x; x = 5; if (x>2) { int y;

if ((y = input_a())==3) output_b(0); else output_b(x+1);

}

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’ const val5 = “teste”

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.

(7)

Prof. Derig Almeida Vidal IFCE - Cedro

Códigos de Barra Invertida

Código Caractere Código ASCII

\yyy Constante Octal yyy

-\xyyy Constante hexadecimal

-\0 Nulo (null) 0

\a Campainha (BEL) 07h

\b Retrocesso (backspace) 08h

\t Tabulação horizontal (TAB) 09h

\n Nova linha (line feed) 0Ah

\v Tabulação vertical (vertical TAB) 0Bh

\f Avanço de formulário (form feed) 0Ch

\r Retorno de carro (Return) 0Dh

\” Aspas 22h

\’ Apóstrofo 27h

\\ Barra invertida “\” 5Ch

Prof. Derig Almeida Vidal IFCE - Cedro

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

Prof. Derig Almeida Vidal IFCE - Cedro

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 IFCE - Cedro

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;

(8)

Prof. Derig Almeida Vidal IFCE - Cedro

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 IFCE - Cedro

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

erro, mas no C isso não ocorre.

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

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 é

(9)

Prof. Derig Almeida Vidal IFCE - Cedro

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.

Prof. Derig Almeida Vidal IFCE - Cedro

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.

Prof. Derig Almeida Vidal IFCE - Cedro

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 IFCE - Cedro

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

(10)

Prof. Derig Almeida Vidal IFCE - Cedro

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 IFCE - Cedro

Conversão de tipos

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

b = ((e / d) + c) * a; // o resultado b será 1721.5 • Passa-se para int32 e depois para float.

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

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.

(11)

Prof. Derig Almeida Vidal IFCE - Cedro

Conversão de tipos

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

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

Prof. Derig Almeida Vidal IFCE - Cedro

Conversão de tipos

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

• Como x e y são inteiros a divisão é inteira.

Prof. Derig Almeida Vidal IFCE - Cedro

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 IFCE - Cedro

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

(12)

Prof. Derig Almeida Vidal IFCE - Cedro

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 IFCE - Cedro

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;

Exercícios

• Quais os tipos de dados básicos na linguagem C padrão?

• Qual é a diferença entre os tipos short int e int1 no compilador CCS?

• Qual é a diferença entre uma variável signed e outra unsigned?

• Qual é a magnitude de armazenamento do tipo long int?

Exercícios

• 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?

• Qual é o resultado armazenado na variável “y” no programa a seguir?

int x,y; x = 5;

(13)

Prof. Derig Almeida Vidal IFCE - Cedro

Exercícios

• Qual é o escopo (global/local) de cada uma das variáveis do programa a seguir?

int test;

int funcao1(int a, int b) { return a+b; } main () { int valor; valor = 5; teste = funcao(valor, 10); }

Prof. Derig Almeida Vidal IFCE - Cedro

Exercícios

• 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;

Prof. Derig Almeida Vidal IFCE - Cedro

Exercícios

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

Prof. Derig Almeida Vidal IFCE - Cedro

Bibliografia

• PEREIRA, Fábio. Microcontroladores PIC:

Referências

Documentos relacionados

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,

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

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

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

· 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

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