Sistemas de Numeração, Codificação e Organização de Dados



Documentos relacionados
Fabio Bento

Sistemas de Numeração

Circuitos Digitais. Conteúdo. Sistema de Numeração e Códigos :: Conversões de Binário para Decimal SISTEMA DE NUMERAÇÃO E CÓDIGOS

Curso: Técnico de Informática Disciplina: Redes de Computadores. 1- Apresentação Binária

2. Sistemas de Numeração, Operações e Códigos. 2. Sistemas de Numeração, Operações e Códigos 1. Números Decimais. Objetivos.

3 Sistemas de Numeração:

Sistemas de Numeração

Escola Secundária c/3º CEB José Macedo Fragateiro. Curso Profissional de Nível Secundário. Componente Técnica. Disciplina de

2. Representação Numérica

Representação de Dados

Hardware de Computadores

Pontifícia Universidade Católica do Rio Grande do Sul Faculdade de Engenharia Disciplina de Lógica Computacional Aplicada. Prof. Dr.

Trabalho compilado da Internet Prof. Claudio Passos. Sistemas Numéricos

Capítulo 2. Numéricos e Códigos Pearson Prentice Hall. Todos os direitos reservados.

Introdução à Engenharia de

Organização e Arquitetura de Computadores I

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À ORGANIZAÇÃO DE COMPUTADORES

Aula 3 - Sistemas de Numeração

Sistemas de Numerações.

Sistemas de numeração

Introdução. A Informação e sua Representação (Parte III) Universidade Federal de Campina Grande Departamento de Sistemas e Computação

SISTEMAS DIGITAIS Prof. Ricardo Rodrigues Barcelar

ARQUITETURA DE COMPUTADORES. Sistemas de Numeração. 1 Arquitetura de Computadores

Sistemas de Numeração. Professor: Rogério R. de Vargas INFORMÁTICA 2014/2

Em um sistema de numeração de base b qualquer, um número positivo é representado pelo polinômio:

Exemplo de Subtração Binária

SISTEMAS DE NUMERAÇÃO

1. Sistemas de numeração

Sistemas de Numeração. Introdução ao Computador 2010/1 Renan Manola

Sistema de Numeração e Conversão entre Sistemas. Prof. Rômulo Calado Pantaleão Camara. Carga Horária: 60h

Sistema de Numeração e Conversão entre Sistemas. Prof. Rômulo Calado Pantaleão Camara. Carga Horária: 60h

Sistema de Numeração e Códigos. CPCX UFMS Prof. Renato F. dos Santos

Sistema de Numeração e Códigos. Sistemas de Informação CPCX UFMS Prof. Renato F. dos Santos

REPRESENTAÇÃO DE DADOS EM SISTEMAS DE COMPUTAÇÃO AULA 03 Arquitetura de Computadores Gil Eduardo de Andrade

Fundamentos em Informática (Sistemas de Numeração e Representação de Dados)

ORGANIZAÇÃO DE COMPUTADORES MÓDULO 13

Sistemas Numéricos e a Representação Interna dos Dados no Computador

Sistemas numéricos. Prof. Leandro Tonietto Introdução a computação e suas aplicações Curso de Segurança da Informação UNISINOS ago-09

Introdução à Lógica de Programação

Principais códigos utilizados. Codificação. Código binário puro. Codificação binária. Codificação Binária. Código Binário puro e suas variantes

centena dezena unidade

Sistemas de Numeração. Engenharia da Computação 3 Período Alex Vidigal Bastos

Aritmética Binária e. Bernardo Nunes Gonçalves

REPRESENTAÇÃO DE DADOS E SISTEMAS DE NUMERAÇÃO

Laboratório - Uso da calculadora do Windows com endereços de rede

Organização de Computadores. Cálculos Binários e Conversão entre Bases Aritmética Binária

Dadas a base e a altura de um triangulo, determinar sua área.

ELETRÔNICA. Changed with the DEMO VERSION of CAD-KAS PDF-Editor ( INTRODUÇÃO

Vamos exemplificar o conceito de sistema posicional. Seja o número 1303, representado na base 10, escrito da seguinte forma:

Aula 2 Modelo Simplificado de Computador

Notas de aula #1 SISTEMAS NUMÉRICOS

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM. Conceitos Básicos ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM

Sistemas de Numeração

Cálculo Numérico Aula 1: Computação numérica. Tipos de Erros. Aritmética de ponto flutuante

CURSO: Engenharia Elétrica e Engenharia de Computação. DISCIPLINA: Circuitos Lógicos I Z520234

Aula 04. Código BCD, Códigos Alfa-numéricos e Sistemas de Detecção de Erros

Unidade 5: Sistemas de Representação

Sistemas de Numeração. Bases Numéricas e Conversão entre bases

Arquitetura de Rede de Computadores

Aula 6 Aritmética Computacional

CAPÍTULO 6 ARITMÉTICA DIGITAL

Informática Aplicada à Química. Sistemas de Numeração Representação de Dados

Figura 1 - O computador

Codificação 1. Introdução. C 2 R r {! + codificação

Aula 2 Sistemas de Numeração (Revisão)

Sistemas de Numeração

Projeto e Desenvolvimento de Algoritmos

ARQUITETURA DE COMPUTADORES

Universidade do Minho Departamento de Electrónica Industrial. Sistemas Digitais. Exercícios de Apoio - I. Sistemas de Numeração

Organização e Arquitetura de Computadores. Aula 10 Ponto Flutuante Parte I Juliana F. Camapum Wanderley

Sistemas de Numeração e Conversão de Base

3. Arquitetura Básica do Computador

SISTEMAS DE NUMERAÇÃO

Circuitos Digitais 144L

Deste modo, por razões tecnológicas e conceituais, os números binários e a álgebra boole-ana formam a base de operação dos computadores atuais.

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.

Tópico 2. Conversão de Unidades e Notação Científica

20 Caracteres - Tipo char

Orientação a Objetos

1. NÍVEL CONVENCIONAL DE MÁQUINA

1.1. Organização de um Sistema Computacional

ULA Sinais de Controle enviados pela UC

1 - Processamento de dados

Bases Numéricas e Conversão. DCC Circuitos Digitais

13 Números Reais - Tipo float

Unidade 3: Sistemas de Numeração Conversões Entre Quaisquer Bases e Aritmética em Bases Alternativas Prof. Daniel Caetano

UNIVERSIDADE CATÓLICA DE PETRÓPOLIS CENTRO DE ENGENHARIA E COMPUTAÇÃO

Álgebra de Boole. Sistema de Numeração e Códigos. Prof. Ubiratan Ramos

Representação de Dados

Representação de Dados e Sistemas de Numeração

Circuitos Digitais. Conteúdo. Introdução. Códigos. Outros Códigos BCD de 4 Bits. Código BCD Circuitos Combinacionais.

ULA- Unidade Lógica Aritmética. Prof. Rômulo Calado Pantaleão Camara. Carga Horária: 60h

Capítulo SETE Números em Ponto Fixo e Ponto Flutuante

1. Introdução ao uso da calculadora

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Lição 1 Introdução à programação de computadores

Introdução. INF1005 Programação I 33K Prof. Gustavo Moreira gmoreira@inf.puc-rio.br

Circuitos Digitais Cap. 5

Transcrição:

Sistemas de controle - Robotizado Sistemas de Numeração, Codificação e Organização de Dados 1. Sistemas de Numeração: Desde tempos remotos o homem utiliza a escrita para registrar e transmitir informação. A escrita vai do antigo hieróglifo egípcio até o alfabeto latino atual. O alfabeto, como conjunto de símbolos, se desenvolve originalmente na Grécia e posteriormente em Roma e constitui a origem de nosso alfabeto atual. Uma das primeiras tentativas de registro de quantidades sob a forma escrita foi o sistema de numeração indo-arábico, do qual são derivados os atuais sistemas de numeração decimal. Sistema de numeração é o conjunto de símbolos utilizados para representação de quantidades e as regras que definem a forma de representação. Um sistema de numeração é determinado fundamentalmente pela base (número de símbolos utilizados). A base é o coeficiente que determina qual o valor de cada símbolo de acordo com a sua posição. Muitos sistemas modernos de computação não representam valores numéricos usando o sistema decimal. Em vez disso, eles simplesmente usam o binário ou o sistema de numeração de complemento de dois. Para entender as limitações da aritmética do computador, você deve entender como os computadores representam os números. 1.1 Uma Revisão do Sistema Decimal: Você já deve ter utilizado o sistema decimal (base 10) por tanto tempo que provavelmente o acha muito natural. Quando você vê um número como "123", você não pensa sobre o valor 123; ao contrário, você gera uma imagem mental de quantos itens este valor representa. Na realidade, contudo, o número 123 representa: 1 Centena + 2 Dezenas + 3 Unidades Ou seja: 123 10 1 10 2 2 10 1 3 10 0 Cada dígito aparecendo à esquerda do ponto decimal (ou da virgular, conforme a preferência) representa um valor entre 0 e 9 que multiplica uma potência positiva de base dez. De modo semelhante, dígitos aparecendo à direita do ponto decimal representam um valor entre 0 e 9 que multiplica uma potência negativa de base dez. Por exemplo, o valor 123,456 significa:

Ou seja: 123,456 10 1 10 2 2 10 1 3 10 0 4 10 1 5 10 2 6 10 3 100 + 20 + 3 + 0.4 + 0.05 + 0.006 = 123,456 10 1.2 O Sistema de Numeração Binário Muitos dos modernos sistemas de computação (incluindo o IBM PC e seus descendentes) operam utilizando a lógica binária. O computador representa valores utilizando dois níveis de tensão elétrica (geralmente 0v e +5v). Com esses dois níveis nós podemos representar exatamente dois valores. Esses podem ser quaisquer dois valores, mas por convenção utilizamos os valores zero e um, ou seja, o sistema de numeração binário possui apenas dois algarismos: 0 e 1. Por isso a sua base é dois (base 2 dois dígitos). Assim, o sistema de numeração binário funciona exatamente como o sistema decimal, com duas exceções: O sistema binário permite apenas os dígitos 0 e 1 (e não 0-9); O sistema binário utiliza potências de dois, o que é diferente das potências de dez. Cada algarismo ou digito binário é chamado de. Este termo tem origem na contração de duas palavras inglesas binary digit, ou seja digito binário. Então, é muito fácil converter um número em binário para decimal, pois vale as mesmas regras: Cada aparecendo à esquerda do ponto decimal representa um valor entre 0 e 1 que multiplica uma potência positiva de base dois. De modo semelhante, dígitos aparecendo à direita do ponto decimal representam um valor entre 0 e 1 que multiplica uma potência negativa de base dois.. Por exemplo, o valor binário 110010,1 representa: 110010,1 2 1 2 5 1 2 4 0 2 3 0 2 2 1 2 1 0 2 0 1 2 1 110010,1 2 32 16 0 0 2 0 0,5 Ou seja: 110010,1 2 = 50,5 10 1.2.1 Conversão de números em decimal para números em binário Para converter números em decimal para binário é um pouco mais difícil. Para números em base 10 inteiros podemos seguir a seguinte técnica:

Toma-se o número decimal a ser convertido para binário e procede-se sucessivas divisões por 2, com quocientes inteiros, e restos que poderão ser 0 ou 1. Divide-se sucessivamente por 2, até obtermos um quociente igual a zero. O valor convertido corresponde aos restos das divisões sucessivas, sendo que o último resto obtido é o algarismo mais significativo do numero binário. Exemplo: Converte 252 10 para binário: 252 2 MENOS 0 126 2 SIGNIFICATIVO 0 63 2 1 31 2 1 15 2 1 7 2 1 3 2 1 1 2 1 0 MAIS SIGNIFICATIVO Ou seja: 252 10 = 11111100 2 Muitas calculadoras cientificas fazem essas operações de conversão entre bases numéricas, usando a função (modo) Bin Dec ou Dec Bin, mas a maioria delas só aceita trabalhar com números binários e decimais inteiros para tais conversões. A fim de conferir se o resultado da conversão exemplificada anteriormente está realmente correto, podemos tirar uma prova de seu resultado, fazendo a reconversão: 7 6 5 4 3 2 1 0 2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0 1 1 1 1 1 1 0 0 1. 2 7 1. 2 6 1. 2 5 1. 2 4 1. 2 3 1. 2 2 0. 2 1 0. 2 0 2 128 64 32 16 8 4 0 0 = 252 10 Uma outra técnica pode ser utilizada, e que é de fato a técnica mais usada pelos profissionais mais experimentados na manipulação de números binários. Com a prática, está técnica se torna mais rápida que a técnica de divisão sucessiva por dois. È necessário apenas estar bem familiarizado com a potencia de base dois. Exemplo: Suponhamos que desejamos converter o número 1257 10 para binário. Vamos escrever então uma série de potência de base dois, que termine na maior potências de dois (2 n ) que pode ser subtraída do número decimal o qual deseja-se converter, desde que o resultado da diferença seja igual ou maior que zero.

2 11 2 10 2 9 2 8 2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0 2048 1024 512 256 128 64 32 16 8 4 2 1 maior potências de dois que ao ser subtraída de 1257 resultando em uma diferença maior ou igual a zero A diferença é positiva Então, fazemos a operação de subtração: 1257 10 1024 10 = 233 10 Uma vez realizada esta operação, assinalar o valor 1 na posição 2 10, como sendo o algarismo mais significativo do número convertido; 1024 512 256 128 64 32 16 8 4 2 1 2 10 2 9 2 8 2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0 1 Caso a diferença tivesse sido igual a zero, nós deveríamos agora assinalar o valor 0 para cada uma das potências de base dois imediatamente inferior (2 9 ; 2 8 ; 2 7, e assim sucessivamente até atingir 2 0 ); Mas caso resto um saldo de diferença, ou seja, uma diferença maior que zero, e que neste caso é de 233 10, assim, devemos ir buscar na nossa série a próxima potência de base dois imediatamente inferior, que no caso é 2 9, e tentar subtraí-la do saldo com a condição de que o resultado da diferença seja igual ou maior que zero. Assinalar o valor 1 para o caso dessa operação de subtração poder ser realizada, caso contrário assinalar 0 ; Bem, como a potência de base dois imediatamente inferior é 2 9, ou seja, 512 10,, assim não é possível subtraí-la de 233 10, sem que o resultado fique negativo. Então não vamos realizar esta subtração: vamos assinalar 0 e vamos prosseguir para a próxima potência de base dois imediatamente inferior. 1024 512 256 128 64 32 16 8 4 0 0 2 10 2 9 2 8 2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0 1 0 Então damos uma olhada na nossa série e constatamos que a potência de base dois imediatamente inferior é no caso 2 8, ou seja 256 e devemos tentar subtraí-la do saldo, desde que o resultado da diferença seja igual ou maior que zero. Assinalar o valor 1 para o caso dessa operação de subtração poder ser realizada, caso contrário assinalar 0 ; Como 256 10 é superior a 233 10, não fazemos a subtração, assinalamos 0 e prosseguimos para a próxima potência imediatamente inferior.

1024 512 256 128 64 32 16 8 4 2 1 2 10 2 9 2 8 2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0 1 0 0 A próxima potência de dois é 2 7 ou 128 10. Então, fazemos a operação de subtração: 233 10 128 10 = 105 10 Uma vez realizada esta operação, assinalar o valor 1 na posição 2 7, e prosseguir para a próxima potencia de dois. 1024 512 256 128 64 32 16 8 4 2 1 2 10 2 9 2 8 2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0 1 0 0 1 Assim sucessivamente, prosseguimos testando a possibilidade de subtrair ou não o valor da potência de dois do saldo restante e assinalando 1 se for possível subtrair e 0 se não for possível subtrair, até alcançarmos a última posição, que no caso é 2 0., ou seja 1. Assim, para o número decimal 1257, temos por fim o seguinte resultado: 1024 512 256 128 64 32 16 8 4 2 1 2 10 2 9 2 8 2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0 1 0 0 1 1 1 0 1 0 0 1 Para tirarmos a prova, basta somar todos os valores em decimal de cada uma das potências de dois que foram assinalados por 1 na série: Assim: 1024 + 128 + 64 + 32 + 8 + 1 = 1257 Números binários, embora tenham pequena importância em linguagens de alto nível, aparecem por toda parte em programas em linguagem assembly. 1.2.2 Formatos Binários Na verdade, todo número binário é formado por um número infinito de dígitos (ou s). Por exemplo, podemos representar em binário o número decimal 5 por: Qualquer número de s de valor zero pode preceder o número binário sem alterar o seu valor total. 101 ou 00000101 ou Adotamos a convenção de ignorar quaisquer zeros à esquerda. Por exemplo, o valor 101 2 representa em binário o número decimal cinco. Uma vez que os 0000000000101 000000000000101 ou microprocessadores e microcontroladores funcionam com grupos de s, também chamados barramentos de dados, com tamanhos que variam: 8 s, 16 s, 32 s, etc, é muito conveniente completar com zeros para estender todos os números binários para

algum de quatro ou oito s. Então, seguindo esta convenção, representaremos o número cinco como 0101 2 ou 00000101 2. As pessoas, principalmente aquelas que estão trabalhando com números contábeis, acostumaram-se a separar cada três dígitos com um ponto (ou uma virgula) para tornar números grandes mais fáceis de ler. Por exemplo, 6.203.435.208 é muito mais fácil de ler e compreender do que 6203435208. Adotaremos uma convenção similar nesta apostila para números binários. Separaremos cada grupo de quatro s binários com um espaço. Por exemplo, o número binário 1010111110110010 será escrito 1010 1111 1011 0010. O mais à direita em um número binário é o da posição zero (X 0 ), e a cada à esquerda tem o valor de índice incrementado de 1 sucessivamente. Um valor binário de oito s usa os s de zero a sete: X 7 X 6 X 5 X 4 X 3 X 2 X 1 X 0 Um valor binário de 16 s usa as posições de zero até quinze: X 15 X 14 X 13 X 12 X 11 X 10 X 9 X 8 X 7 X 6 X 5 X 4 X 3 X 2 X 1 X 0 O Bit mais à direita, X 0, geralmente é referido como o menos significativo (LSB Less Significant Bit). O mais à esquerda é tipicamente chamado de alta ordem (MSB Most Significant Bit). Iremos nos referir aos s intermediários pelos seus respectivos números de índice. 1.3 O Sistema de Numeração Hexadecimal Um grande problema com o sistema binário é a verbosidade. Para representar o valor 128 10 em binário requer oito algarismos ou s. A forma decimal requer apenas três dígitos decimais e, assim, representa números muito mais compactamente do que o sistema binário de numeração o faz. Este fato não foi esquecido pelos engenheiros que desenvolveram os sistemas de computadores binários. Quando tratam de valores grandes, números binários rapidamente tornam-se pesados. Infelizmente, os computadores pensam em binário, então na maior parte do tempo é conveniente utilizar o sistema binário de numeração. O sistema de numeração hexadecimal (base 16) é bastante conveniente para resolver esse problema, pois este sistema oferece duas características que procuramos: São muito compactos; É fácil convertê-los para binário e vice-versa. Por causa disso, muitos dos sistemas de computação binários passaram a usar o sistema hexadecimal de numeração. Uma vez que a base de um número hexadecimal é 16, cada dígito à esquerda do ponto hexadecimal representa algum valor vezes uma potência sucessiva de 16.

Por exemplo, o número 1234 16 (hexadecimal) é igual à: 16 3 16 2 16 1 16 0 4096 256 16 1 1 2 3 4 16 1. 16 3 2. 16 2 3. 16 1 4. 16 0 4096 512 48 4 = 4660 10 Cada dígito hexadecimal pode representar um dos dezesseis valores entre 0 e 15. Assim precisamos de 16 símbolos para representar os algarismo hexadecimal. Usaremos para isso os mesmos símbolos usados no sistema decimal (0, 1, 2,..., 9) e, já que há apenas dez símbolos de dígitos decimais, precisamos inventar seis dígitos adicionais para representar os valores no intervalo de 10 até 15. Ao invés de criar novos símbolos para esses dígitos, usaremos as letras A até F, sendo A=10; B=11; C=12; D=13; E=14 e F=15, respectivamente. Exemplo de número hexadecimal válido: 2F5C 16 = 15964 10 16 3 16 2 16 1 16 0 4096 256 16 1 2 F 5 C 16 2. 16 3 15. 16 2 5. 16 1 12. 16 0 8192 7680 80 12 = 15964 10 Na maioria dos computadores não podemos entrar um subscrito para denotar o valor da base de um número associado. Uma vez que freqüentemente precisaremos entrar com números hexadecimais em um computador, vamos precisar de uma convenção diferente para representar os números em hexadecimal. Em programação assembly é bastante comum a seguinte convenção: Todo valor numérico começa com um símbolo decimal; Todo valor hexadecimal termina com a letra "h" Ex: 2F5Ch ; Todo valor binário termina com a letra "b" Ex: 1010 0110b; Números decimais podem ter um sufixo "t" ou "d". 1.3.1 Conversão de Números Binários Hexadecimal Como você pode ver, números em hexadecimal são compactos e fáceis de ler. Além disso, você pode facilmente converter entre hexadecimal e binário e vice versa. Considere o seguinte exemplo de número binário: 10111110110100 2 Para convertermos de binário para hexadecimal procedemos a seguinte técnica:

Dividimos o número binário em grupamentos de 4 s a partir do menos significativo: 10 1111 1011 0100 2 e tratamos cada grupamento como se fosse um número isoladamente: 2 1 2 0 2 3 2 2 2 1 2 0 2 3 2 2 2 1 2 0 2 3 2 2 2 1 2 0 1 0 1 1 1 1 1 0 1 1 0 1 0 0 2 1. 2 0 1. 8 1. 4 1. 2 1. 1 1. 8 0 1. 2 1. 1 0 1. 4 0 0 2 15 11 4 2 F B 4 16 Assim: 10 1111 1011 0100 2 = 2FB4 16 Já para convertermos de hexadecimal para binário procedemos a seguinte técnica: Cada dígito hexadecimal deve gerar um grupo de 4 s. Considere o seguinte exemplo de número hexadecimal: 7D8 16 7 D 8 16 7 13 8 2 3 2 2 2 1 2 0 2 3 2 2 2 1 2 0 2 3 2 2 2 1 2 0 8 4 2 1 8 4 2 1 8 4 2 1 0 1 1 1 1 1 0 1 1 0 0 0 2 Portanto, 7D8 16 = 111 1101 1000 2 Considere também tabela a seguir, tabela, para facilitar a tarefa de conversão Binário / Hexadecimal: Esta tabela fornece toda a informação que você precisa para converter qualquer número hexadecimal em um número binário e vice-versa. Compare isto com a dificuldade da conversão entre decimal e binário ou decimal e hexadecimal! Já que a conversão entre hexadecimal e binário é uma operação que você precisará efetuar repetidamente, você deveria gastar alguns minutos e memorizar a tabela ao lado. Mesmo se você tiver uma calculadora que fará a conversão para você, descobrirá que a conversão manual será muito mais fácil e conveniente quando tiver que converter entre binário e hexadecimal. 1.3.2 Conversão de Números Decimais para Hexadecimais Binário Hexadecimal 0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 8 1001 9 1010 A 1011 B 1100 C 1101 D 1110 E 1111 F Para converter em decimal para hexadecimal é um pouco mais difícil. Para números em base 10 inteiros podemos seguir a seguinte técnica:

Toma-se o número decimal a ser convertido para hexadecimal e procede-se sucessivas divisões por 16, com quocientes inteiros, e restos que poderão variar entre 0 e 15. Divide-se sucessivamente por 16, até obtermos um quociente igual a zero. O valor convertido corresponde aos restos das divisões sucessivas, sendo que o último resto obtido é o algarismo mais significativo do numero hexadecimal. Exemplo: Converte 5237 10 para hexadecimal: 5237 16 MENOS 5 327 16 SIGNIFICATIVO 7 20 16 4 1 16 1 0 MAIS SIGNIFICATIVO Ou seja: 5237 10 = 1475 16 Para convertermos números em hexadecimal para decimal, podemos simplesmente decompor o número em hexadecimal numa série de potências de base dezesseis. O algarismo menos significativo do número hexadecimal é associado a base dezesseis de expoente zero (16 0 ) e para cada algarismo a esquerda, incrementa-se em 1 o expoente da base. Exemplo: Converter 3FC 16 para a base decimal: 16 2 256 16 1 16 16 0 1 3 F C 16 3 15 12 3. 256 15. 16 12. 1 768 240 12 1020 10 Portanto: 3FC 16 = 1020 10 1.4 O Sistema de Codificação BCD A conversão de um número decimal no seu equivalente binário é chamada codificação. Um número decimal expresso como um código binário ou número binário. como foi apresentado até aqui, é conhecido como código binário puro. Usamos este nome para diferenciá-lo de outros tipos de códigos binários usados em computadores. Destes outros código, o mais aplicado é o código BCD. 1.4.1 O Código BCD 8421: O código BCD é uma forma de representação decimal, ou seja, é um sistema de representação dos algarismos decimais de 0 até 9 com um código binário de 4 s. A

diferença entre representar um número decimal em código binário puro e em BCD é que, ao usarmos o código binário puro convertemos o valor do número decimal e, por sua vez, quando usamos o código BDC convertemos, na verdade, cada algarismo do número decimal em binário. O código BCD mais tradicional é o BCD 8421, que usa o sistema de pesos posicionais 8421 do código binário puro. Como exemplo, velamos como fica o número decimal 97, quando convertido para os dois casos: Conversão Decimal BCD 8421 Conversão Decimal Binário Puro 9 7 1001 0111 97 0110 0001 Se compararmos os dois resultados de conversão, constatamos grande diferença, pois: 1001 0111 0110 0001. Para reconverter (decodificar), diferente do que fazemos na conversão de código binário puro para decimal, e semelhante ao que fazemos na conversão de código binário puro para hexadecimal, precisamos primeiro, dividir o binário BCD em grupos de quatro s, a partir da direita e só então, podemos converter os código BCD em seus equivalentes decimais, gerando algarismo por algarismo decimal, simplesmente somando os pesos das posições de s onde aparece 1 (veja abaixo a tabela de peso binário). O usual código 8421 BCD e os equivalentes decimais são mostrados na outra tabela. Tabela de Peso Binário Decimal 2 3 (8) 2 2 (4) 2 1 (2) 2 0 (1) 0 0 0 0 0 1 0 0 0 1 2 0 0 1 0 3 0 0 1 1 4 0 1 0 0 5 0 1 0 1 6 0 1 1 0 7 0 1 1 1 8 1 0 0 0 9 1 0 0 1 Observe que cada dígito decimal é representado pelo seu código BCD 8421 equivalente de quatro s. Convém deixar sempre um espaço entre cada grupo de 4 s para evitar confusão do formato BCD com o código binário puro. Este método de DECIMAL BCD 8421 BINÁRIO 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 0001 0000 0001 0001 0001 0010 0001 0011 0001 0100 0001 0101 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

representação também se aplica às frações decimais. Como exemplo, convertemos o número BCD no seu equivalente decimal: 0110 0010 1000,1001 0101 0100 = 628,954 O código BCD simplifica a interface o ser humano e a máquina, mas é menos eficiente que o código binário puro. Usam-se mais s para representar um dado número decimal em BCD que em notação binária pura. 1.4.2 Outros Códigos de 4 s: Existem diversos códigos de 4 s além do código BCD natural (8421), alguns são códigos BCD diferente do BCD natural, com diferentes correspondências de valores binários para cada algarismo decimal, como por exemplo o BCD Excesso-3, BCD 2421 (ou BCD Aiken), e BCD 5421. O importante código Gray, que não é um código do tipo BCD, também é um código de 4 s muito importante. Decimal BCD 8 4 2 1 (Natural) Excesso-3 ou Código de Stiz BCD 2 4 2 1 Código Aiken BCD 5 4 2 1 Código Gray 0 0000 0011 0000 0000 0000 1 0001 0100 0001 0001 0001 2 0010 0101 0010 0010 0011 3 0011 0110 0011 0011 0010 4 0100 0111 0100 0100 0110 5 0101 1000 1011 1000 0111 6 0110 1001 1100 1001 0101 7 0111 1010 1101 1010 0100 8 1000 1011 1110 1011 1100 9 1001 1100 1111 1100 1101 O código BCD Aiken é um código semelhante ao código BCD natural, no entanto com "pesos" ou "valores" diferentemente distribuídos. No BCD natural, os pesos são: 8-4- 2-1, Aiken distribuição de código é: 2-4-2-1. A razão para essa codificação é conseguir uma adequada simetria complementar no conjunto dos 0 0000 9 1111 valores binários que codificam os algarismos decimais, de modo que um binário somado ao seu 1 0001 8 1110 complemento resulte sempre em 9. Analise a tabela a seguir. 2 0010 + 7 1101 9 O código Aiken é muito útil para subtração e divisão e ainda é utilizado em relógios digitais, calculadoras e outros dispositivos semelhantes. 3 0011 6 1100 4 0100 5 1011

O código Excesso-3 (XS-3) é também um código binário para codificação de decimal, conhecido ainda como código de Excesso-N, que segue o mesmo princípio de conversão de BCD natural, considerando o número decimal algarismo por algarismo, e convertendo estes para binário, deferindo deste por incrementar 3 unidades ao resultado binário de cada algarismo decimal. Para codificarmos, por exemplo, o número decimal 127, nós codificamos simplesmente cada um dos dígitos decimais resultando em: 0100 0101 1010. A principal vantagem da codificação XS-3 sobre codificação BCD é que um número decimal pode ser complementado de 9 (por subtração) tão facilmente como um número binário pode ser complementado de 1, bastando inverter todos os s. A adição em XS-3 trabalha em um algoritmo diferente da adição de codificação BCD ou da adição da codificação binária pura. Quando adicionamos dois números XS-3, o resultado não é um número XS-3. Por exemplo, quando você adiciona 1 e 0 em XS-3, a resposta parece ser de 4 em vez de um. Para corrigir esse problema, quando você terminar de adicionar cada dígito, você tem que subtrair 3 (binário 0011) se o dígito decimal for inferior a 10 e adicionar 3 se o número decimal for igual ou superior a 10 (acondicionando o número). Já o código Gray é um sistema de código binário onde de um número para outro apenas um varia. Para que ele seja cíclico e mantenha a característica mencionada é necessário se usar todas as 16 variações de 4 s. Daí o fato dele não ser tratado como uma codificação do tipo BCD. Este sistema de codificação surgiu quando os circuitos lógicos digitais se realizavam com válvulas termiônicas, para evitar problemas de ruídos e retardos de comutação e, atualmente, ele tem uma aplicação toda especial com dispositivos eletromecânicos e ópticos, como os transdutores de posição encoders. O disco de leitura óptica de um encoder absoluto, produz erro de leitura quando vários s modificavam-se simultaneamente na variação de uma posição angular para outra posição vizinha. Tal erro resulta do fato de alguns s variarem antes de outros. O uso do código Gray garantiu que qualquer mudança variaria apenas um, além do que, encoders rotativos se beneficiam da natureza cíclica dos códigos Gray, porque os valores da primeira e última posição da seqüência da seqüência também diferem apenas por um. O código Gray tem muitas aplicações interessantes como por exemplo em algoritmos genéticos, algoritmo de torre de Hanói, elaboração de mapas de Karnaugh, correção de erros em comunicação digital, Robótica, formação de ciclo Hamiltoniano em um hipercubo, etc. Propriedades Palavras adjacentes variam apenas 1 Cíclico Refletido Bit mais significativo é igual ao código binário natural Método tabular de conversão

A maneira mais fácil de construir a tabela de conversão base 10 para gray é usar um espelho. Começando no de índice 0, escrevemos o 0 e 1. Em seguida, aplicamos um espelho ao conjunto {01}, ficando o 0 com a seguinte ordenação {0110}. Agora, a primeira metade dos 's do índice 1 tomam o valor 0, e a outra metade o valor 1. O seguinte obtém-se aplicando o 'espelho' a todos os s anteriores. Algumas vantagens de se usar codificação BCD são: Muitos valores não-inteiros, como o decimal de 0,2, por exemplo, têm uma representação de valor de posições infinita em binário (0,001100110011...) mas tem um valor de posições finito em decimal codificado binário (0,0010). Conseqüentemente, um sistema de frações decimais baseadas em BCD, evita erros de representação e de cálculo de tais valores;

Escala por um fator de 10 (ou uma potência de 10) é simples, isto é útil quando um fator de escala decimal é necessário para representar uma quantidade não-inteira em calculadoras científicas e financeiras. O arredondamento em um limite de dígitos decimais é mais simples. Adição e subtração em decimal não necessita de arredondamento. O alinhamento de dois números decimais (por exemplo 1,3 + 27,08) é feito de uma maneira simples, com deslocamentos exatos. A conversão para uma forma caractere ou para exibição (por exemplo, para um formato baseado em texto, como XML, ou acionar os sinais para um display de sete segmentos) é um mapeamento simples, por dígitos e pode ser feito em tempo linear. Conversão de binário puro envolve uma lógica relativamente complexa que abrange dígitos, e para um número grande nenhum algoritmo de conversão de tempo linear é conhecido. Desvantagens: O padrão BCD requer quatro s por dígito decimal, o que significa a necessidade de cerca de 20% a mais de espaço de armazenamento do que uma codificação binária pura. Quando acondicionados de modo que três dígitos decimais são codificados em dez s, a sobre-necessidade de armazenamento é reduzida para cerca de 0,34%, à custa de uma codificação que se encontra em desarranjo com os limites padronizados de bytes de 8-s comuns nos hardwares existente, resultando em implementações mais lentas nesses sistemas. Algumas operações são mais complexas de se implementar. Circuitos somadores lógicos, por exemplo, exigem lógica extra, algo em torno de 20% a mais de circuito, se comparado ao emprego do binário puro, para levá-los a envolver e a gerar o de carry em tempo. A multiplicação, por sua vez, requer o uso de algoritmos que são um pouco mais complexos do que a desloca, carrega e soma (é necessária uma multiplicação binária que exige deslocamentos binários e adições, que são feitas por dígitos ou por grupo de dígitos) Implementações práticas existentes de operações de BCD são tipicamente mais lentas do que as operações em representações binárias, especialmente em sistemas embarcados, devido ao suporte limitado dos processadores para as operações nativas em BCD. 1.5 Organização de Dados: Na matemática pura um número binário qualquer pode assumir um número arrário de s. Computadores, por outro lado, geralmente trabalham com alguns grupamentos de tamanho de números específicos de s. Coleções comuns são s simples, grupos de quatro s (chamados Nibbles), grupos de oito s (chamados Bytes), grupos de 16 s (chamados Words) e outros. Os tamanhos dos grupamentos não são arrários. Há uma boa razão para esses valores particulares de tamanho de grupamento. Esta seção descreverá os grupos de s mais comumente utilizados nos chips dos microcontroladores e microprocessadores.

1.5.1 Bits A menor "unidade" de dado em um computador binário é um sozinho. Uma vez que um único é capaz de representar apenas dois diferentes valores (geralmente zero ou um) você pode ter a impressão de que há um número bem pequeno de itens que você possa representar com um único. Não é verdade! Há um infinito número de itens que você pode representar com um simples. Com um único, você pode representar quaisquer dois itens distintos. Exemplos incluem "zero ou um", "verdadeiro ou falso", "ligado ou desligado", "macho ou fêmea", "certo ou errado", "sim ou não", etc. Contudo, você não está limitado a representar tipos de dados binários (isto é, aqueles objetos que tem apenas dois valores distintos). Você poderia utilizar um único para representar os números 723 e 1245. Ou talvez 6254 e 5. Você poderia também utilizar um único para representar as cores vermelha e azul. Poderia até mesmo representar dois objetos não relacionados com um único. Por exemplo, você poderia representar a cor vermelha e o número 3256 com um único. Você pode representar quaisquer dois diferentes valores com um simples. Contudo, pode representar apenas dois valores diferentes com um. Para confundir ainda mais, diferentes s podem representar diferentes coisas. Por exemplo, um poderia ser utilizado para representar os valores zero e um, enquanto um adjacente poderia ser utilizado para representar os valores verdadeiro e falso. Como você pode dizer apenas olhando estes s? A resposta, é claro, é que você não pode. Mas isto ilustra toda a idéia por trás das estruturas de dados em computadores: dados são o que você define que eles sejam. Se você usa um para representar uma variável booleana (verdadeiro / falso) então aquele (pela sua definição) representa verdadeiro ou falso. Para o ter qualquer significado verdadeiro, você deve ser consistente. Isto é, se você está utilizando um para representar verdadeiro ou falso em um determinado ponto de um programa, você não poderá (ou melhor, não deverá) utilizar o valor verdadeiro / falso armazenado naquele para depois representar vermelho ou azul, em outro ponto do programa. Uma vez que muitos itens que você tentará modelar necessitarão de mais de dois valores diferentes, valores de simples s não serão o mais popular tipo de dado que você utilizará. Contudo, já que todo o resto consiste de grupos de s, os s desempenharão uma importante função em seus programas. É claro, há muitos tipos de dados que requerem dois valores distintos, então parecerá que s sejam muito importantes nestes casos. Contudo, em breve veremos que s individuais são difíceis de manipular, então freqüentemente utilizaremos outros tipos de dados para representar valores booleanos. 1.5.2 Nibbles Um Nibble é uma coleção de quatro s. Ele não seria uma estrutura de dados de especial interesse exceto por dois itens: os números representados em código BCD (Binary Code Decimal) e números em hexadecimais. Tomam-se grupos de quatro s para representar um único dígito em código BCD ou um algarismo em hexadecimal. Com um Nibble, podemos representar até 16 valores distintos. No caso de números decimais, os

valores 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E e F são representados com quatro s. BCD utiliza dez dígitos diferentes (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) e requer quatro s. De fato, quaisquer 16 valores distintos podem ser representados com um Nibble, no entanto os dígitos em hexadecimal e em código BCD são os itens primários que nós podemos representar com um único Nibble. 1.5.3 Byte Sem dúvida, a mais importante estrutura de dados utilizada pelos microcontroladores e microprocessadores é o Byte. Um Byte consiste de oito s e é o menor item de dado endereçável na maioria dos microcontroladores e microprocessadores. As locações da memória principal e os endereços de E/S são todos dados em Bytes. Isto significa que o menor item que pode ser individualmente acessado por um programa de um sistema com microprocessador / microcontrolador é um valor de 8 s. Para acessar algo menor requer que você leia o Byte que contém o dado e remova os s indesejados. Os s em um Byte são normalmente numerados de zero a sete utilizando a convenção mostrada abaixo: 7 6 5 4 3 2 1 0 2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0 X 7 X 6 X 5 X 4 X 3 X 2 X 1 X 0 Bit 0 é o de mais baixa ordem ou menos significativo, e o 7 é o de mais alta ordem ou mais significativo do Byte. Referiremos a todos os outros pelos seus números. Note que um Byte também contém exatamente dois Nibbles: 7 6 5 4 3 2 1 0 2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0 X 3 X 2 X 1 X 0 Y 3 Y 2 Y 1 Y 0 Os s Y 0 até Y 3 compreendem o Nibble de baixa ordem (menos significativo), os s X 0 até X 3 formam o Nibble de alta ordem (mais significativo). Como um Byte contém exatamente dois Nibbles, valores de Byte requerem dois dígitos em hexadecimal. Uma vez que um Byte contém oito s, ele pode representar 2 8, ou 256 valores diferentes. Geralmente, utilizaremos um Byte para representar valores numéricos no intervalo de 0 a 255, ou então números num sistema sinalizado no intervalo -128 a 127, códigos de caracteres ASCII / IBM e outros tipos de dados especiais que não requerem mais do que 256 valores diferentes. Muitos tipos de dados têm bem menos do que 256 itens então oito s geralmente são suficientes. Já que a maioria dos microcontroladores e microprocessadores são máquinas endereçáveis por Bytes, é mais eficiente manipular todo um Byte do que um individual ou um Nibble. Por esta razão, muitos programadores utilizam um Byte inteiro para representar tipos de dados que não requerem mais do que 256 itens, mesmo que menos de 8 s fossem suficientes. Por exemplo, freqüentemente representamos valores booleanos verdadeiro e falso por 00000001 e 00000000 (respectivamente).

Provavelmente o mais importante uso para um Byte é guardar o código de um caractere. Caracteres digitados no teclado, exibidos na tela e impressos na impressora são na verdade referidos dentro dos sistemas de processamento digital por valores numéricos. Para permitir a comunicação com o resto do mundo o IBM PC usa uma variante do conjunto de caracteres ASCII. Há 128 códigos definidos no conjunto de caracteres padrão ASCII / IBM. Este código utiliza ainda os outros 128 valores restantes para códigos de caracteres estendidos incluindo caracteres Europeus, símbolos gráficos, letras Gregas e alguns símbolos matemáticos, etc. 1.5.4 Word Uma Word (palavra) é um grupo de 16 s. Numeraremos os s em uma Word começando do zero e indo até o quinze. A numeração dos s aparece abaixo: 15 2 15 14 2 14 13 2 13 12 2 12 11 2 11 10 2 10 9 2 9 8 2 8 7 2 7 6 2 6 5 2 5 4 2 4 3 2 3 2 2 2 1 2 1 0 2 0 X 15 X 14 X 13 X 12 X 11 X 10 X 9 X 8 X 7 X 6 X 5 X 4 X 3 X 2 X 1 X 0 Semelhante ao que acontece como Byte, o 0 é o de baixa ordem (menos significativo) e o 15 é o de alta ordem (mais significativo). Quando referenciamos os outros s em uma Word usamos o número de suas respectivas posições. 15 2 15 14 2 14 13 2 13 12 2 12 11 2 11 10 2 10 9 2 9 8 2 8 7 2 7 6 2 6 5 2 5 4 2 4 3 2 3 2 2 2 1 2 1 0 2 0 X 7 X 6 X 5 X 4 X 3 X 2 X 1 X 0 Y 7 Y 6 Y 5 Y 4 Y 3 Y 2 Y 1 Y 0 Note que uma Word contém exatamente dois Bytes. Os s X 0 a X 7 formam o Byte de baixa ordem, os s Y 0 a Y 7 formam o Byte de alta ordem: Naturalmente, uma Word pode ser quebrada em quatro Nibbles como mostrado abaixo: 15 2 15 14 2 14 13 2 13 12 2 12 11 2 11 10 2 10 9 2 9 8 2 8 7 2 7 6 2 6 5 2 5 4 2 4 3 2 3 2 2 2 1 2 1 0 2 0 P 3 P 2 P 1 P 0 Q 3 Q 2 Q 1 Q 0 R 3 R 2 R 1 R 0 S 3 S 2 S 1 S 0 O Nibble zero (S0 até S 3 ) é o Nibble de baixa ordem (menos significativo) na Word e o Nibble três (P 0 até P 3 ) é o de alta ordem (mais significativo). Os outros dois Nibbles são o Nibble um (R 0 até R 3 ) e Nibble dois (Q 0 até Q 3 ). Com 16 s, você pode representar 2 16 (65536) valores ou itens diferentes. Esses podem ser valores no intervalo 0 a 65535, ou de -32768. até +32767, para um sistema sinalizado ou qualquer outro tipo de dado com não mais do que 65536 valores ou itens. Os três maiores usos para Words são valores inteiros, deslocamentos e valores de segmentos.

Words podem representar valores inteiros no intervalo de 0 a 65535 ou de -32768 a 32767 em um sistema sinalizado. Valores numéricos sem sinal são representados por valores binários correspondendo aos s na Word. Valores numéricos com sinal usam a forma de complemento de dois para valores numéricos. Valores de segmentos, os quais são sempre de 16 s de comprimento, constituem o endereço do parágrafo de um segmento de código, dado, extra ou pilha na memória. NOTA: O termo Word (palavra) é utilizado também, de uma forma geral, para designar a um grupamento de n s qualquer (depende do processador ou do sistema de código usado). Por exemplo, os primeiros microprocessadores eram de quatro s e a esse grupamento de quatro s também chamamos de palavra binária, O Código ASCII, como vimos, representa símbolos alfanuméricos, podendo representá-los em grupamentos de sete s ou, se estendido, de oito s a ambos esses grupamentos podemos também, de forma genérica, chamarmos de palavra binária. 1.5.5 Double Word Uma Double Word é exatamente o que seu nome indica, um par de Words. Então, uma quantidade de Double Word é de 32 s de comprimento como mostrado abaixo: 31 23 15 7 0 Naturalmente, esta Double Word pode ser dividida em duas Words, sendo uma de alta e outra de baixa ordem. Pode também ser dividida em quatro Bytes ou oito Nibbles: Double Words podem representar todo tipo de diferentes coisas. Primeiro e principalmente é usada para guardar endereços segmentados. Um outro item comum representado com um Double Word é um valor inteiro de 32 s (o qual permite números sem sinal em um intervalo de 0 até 4.294.967.295 ou números com sinal em um intervalo de -2.147.483.648 até 2.147.483.647). Valores de ponto flutuante de 32 s também cabem dentro de uma Double Word. Muitas das vezes, usaremos Double Words para guardar endereços segmentados. OBS: Dado Informação Elementos distintos de uma informação; Coleção de dados representada de forma compreensível ao ser humano.