REPRESENTAÇÃO DE DADOS EM SISTEMAS DE COMPUTAÇÃO
AULA 03 – Arquitetura de Computadores
Gil Eduardo de Andrade
O conteúdo deste documento é baseado no livro “Princípios Básicos de Arquitetura e
Organização de Computadores” – Linda Null e Julia Labur.
Introdução
Ao longo dos anos, muitos padrões e convenções foram estabelecidas para determinar
certos aspectos da organização de computadores. Existem várias maneiras pelas quais
computadores podem armazenar e manipular números e caracteres.
A unidade de informação mais básica em um sistema digital é chamada de bit, que é uma
abreviação de binary digit ou digíto binário. Um bit, de forma mais clara, nada mais é que um
estado de “ligado” ou “desligado” (ou “alto” e “baixo”) dentro de um circuito de computador.
Em 1964, os projetistas do computador mainframe IBM System/360 estabeleceram como
convenção o uso grupos de 8 bits como a unidade básica de endereçamento de memória do
computador, que foi denominada como byte.
Palavras em um computador consistem de dois ou mais bytes, ou seja, possuem 16 bits,
32 bits, 64 bits ou qualquer tamanho faça sentido dentro do contexto da organização do
computador.
Sistemas de Numeração Posicional
A ideia geral por trás de sistemas de numeração posicionais é que um valor numérico é
representado por potências crescentes de uma raiz (ou base). Isto é frequentemente referido
como sistema de numeração ponderado porque cada posição é ponderada pela potência de
uma base.
O conjunto de números válidos para um sistema de numeração posicional tem o mesmo
tamanho que a base daquele sistema. Exemplificando, existem 10 dígitos no sistema decimal,
que vão de 0 a 9, e dois dígitos no sistema binário, que vão de 0 a 1. O maior número válido para
um sistema em uma determinada base é um a menos do que a base, ou seja, o número 8 não é um
numeral válido em qualquer sistema com base menor que 9. Para distinção de números em bases
diferentes, usamos a base como subscrito, tal como 3310 para representar o número decimal 33.
Qualquer inteiro decimal pode ser expresso com seu valor exato em qualquer outro
sistema de base inteira. Exemplo, três números representados como potência de uma base:
As duas bases mais importantes na computação são a binária (base dois) e a hexadecimal
(base 16). Outra base interessante é a octal (base 8). O sistema binário utiliza somente os dígitos
0 e 1; o sistema octal, utiliza os dígitos de 0 a 7. O sistema hexadecimal permite dígitos de 0 a 9,
mais A, B, C, D, E e F que são usados para representar os números de 10 a 15.
Conversões de Decimal para Binário
Gottfried Leibniz (1646 – 1716) foi o primeiro a generalizar a ideia do sistema decimal
(posicional) para outras bases. Até que os primeiros computadores digitais fossem construídos no
final da década de 1940 esse sistema permaneceu nada mais do que uma curiosidade matemática.
Nos dias atuais é utilizado no coração de praticamente todos os dispositivos eletrônicos que se
baseiam em controles digitais.
Pela sua simplicidade, o sistema de numeração binário se traduz facilmente para circuitos
eletrônicos. Também é fácil de ser compreendido pelos seres humanos. Abaixo é apresentada
uma tabela com alguns números e suas relativas potências.
Conversão de Números Inteiros sem Sinal
A conversão entre sistemas com bases diferentes pode ser feito por subtrações sucessivas
ou pelo método de divisão-resto. O método com subtrações é incômodo e exige familiaridade
com as potências da base sendo usada. Porém por questões de conhecimento vamos demonstrálo no exemplo abaixo:
→ Convertendo 10410 para base 3. Sabemos que 34 = 81 é a mais alta potência de 3 que é menor
que 104, sabemos então que nosso número terá cinco dígitos (um para cada potência da base: de
0 até 4). Verificamos quantas vezes 81 cabe em 104, descobrimos que é apenas uma, então
subtraímos 104 – 81 = 23. Sabemos que a próxima potência de 3, 33 = 27, é muito grande para
subtrair de 23, de modo que anotamos o número 0 e vemos quantas vezes 32 cabe em 23. Vemos
que é 2 (duas) e subtraímos de 18. Ficamos com 5, do qual subtraímos 31 = 3, ficamos com 2,
que é 2 x 30. Estes passos são apresentados a seguir:
Contudo o método de divisão-resto é mais fácil e rápido do que o método de subtrações
sucessivas. Ele adota a ideia de que divisões sucessivas pela base são de fato subtrações
sucessivas pela potência da base. O resto que obtemos quando dividimos consecutivamente pela
base são os dígitos do resultado, que são lidos de baixo para cima. Abaixo apresentamos um
exemplo deste método:
→ Convertendo 10410 para base 3, utilizando para tal o método de divisão-resto.
Esse método funciona com qualquer base e devido à simplicidade de seus cálculos, é
particularmente útil na conversão de decimal para binário. Logo abaixo temos um exemplo deste
tipo de conversão:
→ Convertendo 14710 para binário (base 2), utilizando para tal o método de divisão-resto.
Um número binário com N bits pode representar inteiros sem sinal de 0 a 2 N – 1. Por
exemplo 4 bits podem representar valores decimais de 0 a 15, enquanto 8 bits podem representar
valores de 0 a 255. O intervalo de valores que podem ser representados por um dado número é
extremamente importante ao se fazer operações aritméticas com números binários. Considere a
situação na qual números binários possuem tamanho de 4 bits e queremos somar 11112 (1510)
com 11112. Sabendo que 15 + 15 = 30, porém 30 não pode ser representado usando somente 4
bits. Este é um exemplo de condição conhecida como overflow, ocorre quando o resultado de
uma operação aritmética fica fora do intervalo de precisão permitido para uma dada quantidade
de bits.
Conversão de Frações
Frações em qualquer base podem ser aproximadas em qualquer outra base usando
potências negativas da raiz. Pontos da base separam a parte inteira de um número de sua parte
fracionária. No sistema decimal, o ponto da base é chamado de ponto decimal. Frações binárias
possuem ponto binário.
Podemos converter frações entre bases diferentes usando métodos análogos aos métodos
de subtrações sucessivas e divisão-resto para converter inteiros. O exemplo a seguir mostra como
podemos usar subtrações sucessivas para converter um número decimal para base 5.
→ Convertendo 0,430410 para base 5, utilizando para tal o método de subtrações sucessivas.
Como o método do resto trabalha com potências positivas da base para conversão de
inteiros, é razoável usar a multiplicação para converter frações porque elas são expressas com
potências negativas da base. Entretanto, em vez de procurar os restos, como feito acima, usamos
somente a parte inteira do produto depois da multiplicação pela base. A resposta é lida de cima
para baixo, e não de baixo para cima. O exemplo abaixo ilustra este processo.
→ Convertendo 0,430410 para base 5, utilizando para tal o método de divisão-resto.
Representação de Inteiro com Sinal
Números com sinal exigem tratamento de problemas adicionais. Quando uma variável
inteira é declarada em um programa, muitas linguagens de programação automaticamente
alocam uma área de memória que inclui um sinal como o primeiro bit daquela posição de
memória. Os bits restantes (além do sinal) são usados para representar o próprio número.
Como este número é representado depende do método usado. Entre as abordagens
existentes o método de magnitude com sinal (mais intuitivo) utiliza os bits restantes para
representar a magnitude do número. Este método utiliza o conceito de complementos.
Magnitude com Sinal
A partir deste ponto, não ignoramos mais a possibilidade de números binários negativos,
sendo assim consideramos o conjunto de números inteiros positivos e negativos como conjunto
denominado de inteiros com sinal. O problema de para representarmos inteiros com sinal é
justamente o sinal, para isso utilizamos o método de magnitude com sinal.
Como sugere o nome, um número de magnitude com sinal possui um sinal no seu bit
mais à esquerda (conhecido também como bit mais significativo). Por exemplo:
→ Considerando uma inteiro de 8 bits:
– 1 seria representado como 10000001
+ 1 seria representado como 00000001
Em um sistema de computação que use a representação de magnitude com sinal e 8 bits
para armazenar inteiros, 7 bits podem ser usados para representação da magnitude do número.
Isto significa que o maior inteiro que pode ser representado com 8 bits é 27 – 1 = 127, já o menor
inteiro que pode ser representado com 8 bits é –127.
Computadores executam cálculos matemáticos com inteiros, a aritmética de magnitude
com sinal é realizada usando-se essencialmente os mesmos métodos que os humanos usam com
lápis e papel. Considerando as regras:
(1) Se os sinais são iguais, adicione as magnitudes e use o mesmo sinal para o resultado
(2) Se os sinais são diferentes, você deve determinar qual operando tem a magnitude maior. O
sinal do resultado é o mesmo sinal do operando de maior magnitude, e a magnitude deve ser
obtida subtraindo (e não somando) o maior do menor.
Ao exemplificar esta ideia com um inteiro de 8 bits, temos que ter cuidado de incluir
somente 7 bits na magnitude da resposta, descartando os carries (“vai um”) que ocorrem para o
bit de mais alta ordem. Veja:
→ Somando 010011112 com 001000112 utilizando aritmética de magnitude com sinal temos:
A aritmética segue como na adição decimal, incluindo os carries, até que seja atigindo o
sétimo bit a partir da direita. Se houver um carry aqui, dizemos que temos uma condição de
overflow e o carry é descartado, resultando em uma soma incorreta. Exemplo de overflow:
→ Somando 010011112 com 011000112 utilizando aritmética de magnitude com sinal temos:
Assim como na adição a subtração em magnitude com sinal é realizada de maneira
similar à lápis e papel na aritmética decimal, na qual algumas vezes é necessário pedir
emprestado dígitos do minuendo. Veja os exemplos a seguir:
→ Subtraindo 010011112 com 011000112 utilizando aritmética de magnitude com sinal temos:
→ Somando 100100112 (-19) com 011000112 (+13) utilizando aritmética de magnitude com sinal
temos:
Obs: O primeiro número (o aditivo) é negativo porque seu bit se sinal está configurado como 1.
O segundo número (o adendo) é positivo. O que devemos fazer de fato é uma subtração.
Primeiro determinamos qual dos dois é maior em magnitude e usamos este número como o
aditivo. Seu sinal será o sinal do resultado.
→ Subtraindo 100110002 (-24) com 101010112 (-43) utilizando aritmética de magnitude com
sinal temos:
Download

REPRESENTAÇÃO DE DADOS EM SISTEMAS DE COMPUTAÇÃO