Buscar

02_Numeros_aritmetica_bin


Continue navegando


Prévia do material em texto

Capítulo 2: Números e Aritmética Binária
Os computadores armazenam e manipulam a informação na forma de números. Instruções de programas, dados numéricos, caracteres alfanuméricos, são todos representados por meio de combinações de algarismos numéricos, as quais são interpretadas, manipuladas e trasformadas em formatos reconhecíveis pelo Ser Humano, a medida que o computador executa suas tarefas. 
Embora o sistema numérico padrão seja o decimal, onde dez algarismos (0 a 9) são usados para representar todos os números, os computadores adotam internamente o sistema binário, onde apenas os algarismos 0 e 1 são usados na composição dos números. O uso do sistema binário apresenta vantagens importantes sob o ponto de vista da construção e operação dos computadores:
Cada um dos algarismos binários, 0 e 1, é representado por um valor de tensão especí​fico nos circuitos eletrônicos dos computadores. Desta forma o armazenamento e a manipulação de informação em um computador é feito apenas com dois valores de tensão elétrica.
Os programas de computadores são escritos por meio de sentenças matemáticas (expressões algébricas), as quais expressam a lógica das tarefas a serem executadas pela máquina, e delimitam os resultados numéricos que podem ser obtidos a partir dos valores de entrada. A forma algébrica mais eficiente de representação de expressões lógicas, conhecida como álgebra booleana, é baseada no sistema binário de numeração.
Deste modo, por razões tecnológicas e conceituais, os números binários e a álgebra bool​e-ana formam a base de operação dos computadores atuais.
�
Sistema Binário de Numeração
Embora use apenas um sub-conjunto dos algarismos decimais, o sistema binário adota as mesmas regras do sistema decimal para a representação de grandezas numéricas e para as operações aritméticas. De fato, o uso de sistemas numéricos diferentes na escrita de um mesmo número, não altera a quantidade representada, desde que os sistemas adotem uma notação consistente, conforme descrito a seguir.
�
O Conceito de Número
Números são expressões de quantidades. Por definição, um número é uma relação que existe entre qualquer quantidade e uma outra, tomada como termo de comparação, a que se chama unidade.�
Numerais
Os símbolos usados para representar os números são chamados numerais. De forma geral, os sistemas numéricos possuem um conjunto limitado de numerais primitivos, chamados de “numerais de valor próprio”, ou simplesmente de algarismos, com os quais é possível gerar os numerais para todos os números. A quantidade de algarismos de um sistema é chamada de “base” do sistema, como no sistema decimal onde a base é 10 porque este possui dez algarismos: 0, 1, 2, ..., 9. 
Sistemas Numéricos
O sistema decimal é um sistema posicional, significando que o valor representado por cada algarismo de um numeral deve ser multiplicado por uma potência da base, a qual é função da posição ocupada pelo algarismo no numeral . Seja por exemplo, o número 6903:
6903 = 6 x 103 + 9 x 102 + 0 x 101 + 3 x 100
6903 = 6.000 + 900 + 0 + 3
Atualmente apenas os sistemas posicionais têm uso comercial corrente, mas existem siste​mas com regras de representação diferentes, como por exemplo o sistema romano de numeração.
�
Números Binários
O sistema binário é um sistema com notação posicional que usa somente os algarismos 0 e 1. Quando um número é escrito no sistema binário, os dígitos individuais representam os coeficientes de potências de 2, de modo análogo ao feito para as potências de 10 no sistema decimal. Seja um número qualquer escrito em binário, como por exemplo 101: 
101b = 1 x 22 + 0 x 21 + 1 x 20
101b = 4 + 0 + 1 = 5d
Nas fórmulas acima, por questão de clareza, adicionamos aos números o prefixo “b”, para indicar a base binária e o prefixo “d” no caso de representação em decimal. Notamos que ambas as representações “101” e “5” expressam a mesma quantidade, usando porém siste​mas numéricos diferentes, como nos exemplos adicionais da tabela a seguir, onde os dez​esseis primeiros números decimais são representados em binário.
Tabela 1: Correspondência entre entre os dezesseis primeiros numerais decimais e binários.
	DECIMAL
	BINÁRIO
	DECIMAL
	BINÁRIO
	0
	0
	8
	1000
	1
	1
	9
	1001
	2
	10
	10
	1010
	3
	11
	11
	1011
	4
	100
	12
	1100
	5
	101
	13
	1101
	6
	110
	14
	1110
	7
	111
	15
	1111
�
Números Reais e Conversões de Bases
Um número que não é inteiro pode ser expresso usando a notação de vírgula decimal. O decimal 1,8125 tem o significado numérico:
1,8125 = 1 x 100 + 8 x 10-1 + 1 x 10-2 + 2 x 10-3 + 5 x 10-4
1,8125 = 1 + 0,8 + 0,01 + 0,002 + 0,0005
Do mesmo modo, podemos expressar um número binário fracionário, usando a notação de vírgula binária:
1,1101 = 1 x 20 + 1 x 2-1 + 1 x 2-2 + 0 x 2-3 + 1 x 2-4
Assim, dígitos a direita da vírgula binária são coeficientes de 2-n, onde “n” é a distância do algarismo à direita da vírgula binária. Em aritmética decimal, movendo-se a vírgula decimal “k” casas para a esquerda ou direita, divide-se ou multiplica-se, respectivamente, o número por 10k. No sistema binário, este deslocamento divide ou multiplica por 2k.
�
Conversão entre Binário e Decimal
Tendo em vista que as representações binária e decimal não alteram a quantidade repre​sentada, é possível converter números expressos em decimal para seu equivalente com numerais binários e vice-versa.
�
Conversão para Decimal
A conversão de um número binário para um número decimal é obtida usando a aritmética ilustrada nas fórmulas anteriores.
Ex.1: Converter o número binário 1001 para a base 10:
1001b 	= 1 x 23 + 0 x 22 + 0 x 21 + 1 x 20
= 8 + 0 + 0 + 1 = 9d
Ex.2: Converter 1,0110b para a base 10:
1,0110b 	= 1 x 20 + 0 x 2-1 + 1 x 2-2 + 1 x 2-3 + 0 x 2-4
= 1 + 0 + 0,25 + 0,13 + 0 = 1,38d
Conversão para Binário
A conversão de um número decimal “N” para binário é feita facilmente usando as seguintes regras:
�
Caso “N” seja inteiro, por exemplo, N = ... x8x4x2x1,000...
Onde os x’s são 0’s e 1’s e os índices indicam a significância numérica a ser atribuída a cada dígito binário, de acordo com sua posição.
Divide-se N por 2, mantendo o quociente na forma inteira. Como cada divisão move a vír​gula binária uma casa para a esquerda, temos:
N/2 = ...x8x4x2x1,/2 = ...x8x4x2 + resto x1
Assim, o dígito menos significativo x1 é o resto, e o quociente é um novo número N’ = ...x8x4x2, onde x2 passou a ser o dígito menos significativo. Uma seqüência de divisões por 2 resultará na forma binária de N através dos restos.
Ex.: Converter o decimal 19 para a base 2:
	19
	2
	
	
	
	
	
	1
	9
	2
	
	
	
	
	
	1
	4
	2
	
	
	
	
	
	0
	2
	2
	
	
	
	
	
	0
	1
	2
	
	
	
	
	
	1
	0
	 19d = 10011b
Caso N seja menor que 1, por exemplo N = ...000,x1/2x1/4x1/8...
Pode-se testar se x1/2 é 0 ou 1 multiplicando-se N por 2. Se x1/2 for 1, o produto 2N será maior que 1; se x1/2 for 0, 2N será menor que 1. A multiplicação por 2 move a vírgula binária uma casa para a direita, movendo conseqüentemente, x1/4 para a posição de x1/2. A representação binária pode ser encontrada através de sucessivas multiplicações por 2. Ex.: Converter o decimal 0,69 para a base 2: 0,69 x 2 = 1,38
 0,38 x 2 = 0,76
 0,76 x 2 = 1,52
 0,52 x 2 = 1,04
 0,04 x 2 = 0,08 
 0,08 x 2 = 0,16 0,69d = 0,101100...b
Caso N seja fracionário e maior que 1
A conversão, neste caso, é feita separadamente, conforme as regras dos casos anteriores, e os resultados são combinados.
Ex.: Converter o decimal 19,69 para a base 2:
Convertera parte inteira
19d = 10011b, conforme visto no item 1.
Converter a parte fracionária
0,69d = 0,101100b, conforme visto no item 2.
Unir as partes
19,69d = 10011,101100b
Outras Bases Numéricas
Pode-se definir de um número ilimitado de sistemas, além dos sistemas decimal e binário vistos. Os mais úteis entretanto, para uso em computação, são os sistemas com bases octal e hexadecimal.
 
Sistema Octal
Neste sistema são usados os algarismos decimais de 0 a 7. Todo número neste sistema é expresso como uma soma de potências de 8 multiplicadas por coeficientes apropriados, que são os próprios dígitos do número.
Sistema Hexadecimal
No sistema hexadecimal a base é 16, sendo usados os dez algarismos decimais 0, 1, 2, ...,9 para representar os dez primeiros algarismos hexadecimais, com os outros seis algarismos adicionais sendo representados pelas letras A, B, C, D, E e F. Todo número neste sistema é expresso como uma soma de potências de 16 multiplicadas por coeficientes apropriados, que são os próprios dígitos do número.
A relação especial entre os sistemas octal e hexadecimal e o sistema binário resulta do fato de que três dígitos binários podem representar exatamente oito (23) números diferentes e que quatro dígitos binários podem representar dezesseis (24) números diferentes.
Conversões do Sistema Hexadecimal
As conversões deste sistema segue as mesmas regras do sistema octal, lembrando que: cada dígito hexadecimal corresponde a quatro dígitos binários e cada dígito octal corresponde a três dígitos binários.
	
Ex.: Correspondência das bases 2, 8 e 16:
 2 3 7 4 , 6 4 5 2 	=> octal
 ---- ------ ------ ------ ------ ----- ------ ------
 1 0 0 1 1 1 1 1 1 0 0 , 1 1 0 1 0 0 1 0 1 0 1 0 	=> binário
 ------ -------- -------- -------- --------- --------
 4 F C , D 2 A 	=> hexadecimal
De Hexadecimal para decimal
Ex.: Converter 7AB016 para a base 10. Lembrar que A=10, B=11, C=12, D=13, E=14 e F=15.
 7AB016 = 7 x 163 + 10 x 162 + 11 x 161 + 0 x 160
 = 28.672 + 2.560 + 176 + 0 = 31.40810
De Decimal para hexadecimal
Ex.: Converter 198910 para a base 16:
 1989 | 16
 ------
 5 124 | 16
 ------
 12 7 => ou seja, 198910 = 7C516
De Hexadecimal para octal
Neste caso, passa-se primeiro para a base binária e a seguir para a base octal.
Ex.: Converter 1F16 para a base 8:
 1 F
 ----- ------
 0001 1111 = 00 011 111
 --- ----- ----
 0 3 7 	==> 1F16 = 378
De Octal para Hexadecimal
Ex.: Converter 558 para a base hexadecimal:
 5 5
 ---- ----
 101 101 = 10 1101
 --- ------
 2 D => 558 = 2D16
A tabela a seguir mostra as formas de se escrever a mesma quantidade, nos sistemas deci​mal, hexadecimal, octal e binário, para valores entre 0 e 15 (decimal)
	decimal
	Hexadecimal
	Octal
	Binário
	0
	0
	0
	0
	1
	1
	1
	1
	2
	2
	2
	10
	3
	3
	3
	11
	4
	4
	4
	100
	5
	5
	5
	101
	6
	6
	6
	110
	7
	7
	7
	111
	8
	8
	10
	1000
	9
	9
	11
	1001
	10
	A
	12
	1010
	11
	B
	13
	1011
	12
	C
	14
	1100
	13
	D
	15
	1101
	14
	E
	16
	1110
	15
	F
	17
	1111
Tipos de Informação
A informação é representada num computador através de seqüências binárias. Cada dígito binário é chamado de “bit” (binary digit), o componente básico da representação de infor​mação, sendo Os conjuntos de 4 e 8 bits chamados respectivamente de “nibble” e “byte”. A informação, para ser armazenada e utilizada em um computador, deve existir na forma de uma entidade, a qual pode ser composta por um número arbitrário de bits, ocupando uma ou mais palavras na memória do computador. os tipos básicos de entidades são mos​trados no diagrama a seguir. 
 Instruções /Ponto fixo
 / / 
 Informação Numéricos 
 \ \ / \
 \ \ / \ 
 \ \ Dados \ 
 \ \ \ 
 Endereços \ Ponto Flutuante 
 \ 
Não-numéricos (caracteres e outros) 
Existe uma divisão fundamental em instruções (informação de controle) e dados. As instruções são conjuntos de bits definidos pelo fabricante do processador usado no com​putador, não seguindo nenhum padrão específico. Os dados, ao contrário, seguem padrões de representação definidos, como visto a seguir, pois devem ser intercambiados entre com​putadores de fabricantes diferentes.
�
Dados Numéricos
Os padrões Para representação de números em computadores, foram definidos com base nos seguintes fatores:
Os tipos dos números a serem representados, isto é, inteiros, reais, complexos, etc.
A faixa de valores possíveis. Quanto maior a faixa, mais bits são necessários para rep​resentar o número.
A precisão do número, ou seja quantas casas a direita da vírgula serão usadas na repre​sentação de valores que não sejam inteiros.
custo do hardware necessário para armazenar e processar os números.
Os formatos resultantes mais comuns são as representações em ponto fixo e ponto flutu​ante descritas a seguir. 
�
Números em Ponto Fixo
Este formato é derivado diretamente da representação decimal de um número como uma seqüência de dígitos separados por uma vírgula decimal (chamada de “ponto” devido a notação americana para os números). Os dígitos a esquerda da vírgula decimal represen​tam um inteiro; os dígitos a direita representam uma fração. Isto é a notação posicional, vista anteriormente, onde cada dígito tem um peso fixo de acordo com sua posição relativa à vírgula decimal:
O número decimal 192,73 é equivalente a:
1 x 102 + 9 x 101 + 2 x 100 + 7 x 10-1 + 3 x 10-2
Se o número for binário temos um formato análogo, como no exemplo a seguir:
1,1101 = 1 x 20 + 1 x 2-1 + 1 x 2-2 + 0 x 2-3 + 1 x 2-4
Os computadores guardam na memória apenas sequências de bits, não representando vír​gulas ou sinais. Desta forma, o número 1,1101 deve ser dividido em duas partes, inteira e fracionária, para ser armazenado, como na figura a seguir, onde ambas as partes são guardadas na memória com 8 bits de precisão.
1,1101 é representado como:	
00000001 	(parte inteira)
11010000 	(parte fracionária)
Cabe a instrução de programa que faça uso do número armazenado na memória, reconsti​tuí-lo internamente ao processador quando do seu uso. Se quisermos representar um número com sinal, um bit (o mais significativo) é acrescentado à esquerda do número para indicar o sinal, segundo a convenção:
Bit mais a esquerda = 1. Número negativo
Bit mais a esquerda = 0. Número positivo
Deste modo, um número com “n” bits, é composto por um sinal (bit mais a esquerda) e por uma mantissa, onde estão as partes inteiras e fracionária. Normalmente, ao ser arma​zenado em memória, o sinal é colocado junto a parte inteira do número. 
xn-1xn-2...x2x1x0
| \__________/
 sinal magnitude (partes inteira e fracionária)
Números inteiros são um caso particular dos números em ponto fixo, onde não há parte fracionária, não havendo necessidade da vírgula decimal que no entanto estaria implícita.Com um número inteiro que tenha magnitude de “n” bits pode-se representar todos os inteiros “N” na faixa
0 <= |N| <= 2n - 1
O formato da fração permite números com magnitude na faixa
0 <= |N| <= 1 - 2-n.
Em geral, o ponto fixo permite uma faixa limitada de valores e tem necessidade de hard​ware relativamente simples. 
Números em Ponto flutuante
A faixa de números que podem ser representados por um código numérico ponto fixo é insuficiente para muitas aplicações, particularmente cálculos científicos onde números muito grandes e muito pequenos são freqüentemente encontrados. A notação científica permite que tais números sejam representados usando, relativamente, poucos dígitos:
1,0 x 1018 = 1.000.000.000.000.000.000
pto. flutuante ponto fixo
Um número ponto flutuante tem a forma M x BE
 	onde 	M = mantissa
 		B = base
 		E = expoente
	Em 1,0 x 1018 => 	M = 1,0
				B = 10 
				E = 18
Para implementação no computador, a mantissa e o expoente são codificados como números ponto fixo na base numérica r, onde r é usualmente 2 ou 10. A base B é alguma potência de r. Desde que a base é uma constante, ela não precisa estar incluída em um código numérico. Um número em ponto flutuante é portanto armazenado na memória do computador como um par de números ponto fixo - uma mantissa M, que é usualmente uma fração ou um inteiro; e um expoente E, que é um inteiro.
A precisão de M x BE é determinada pelo número de bits usados para representar M. A faixa de valores possíveis é determinada por B e E. Formatos ponto flutuante são usados para representar números reais sobre um intervalo contínuo +/- R. Desde que apenas um conjunto finito de números pode ser representado (no máximo 2n, onde n é o tamanho da palavra ponto flutuante), estes números são distribuídos sobre um intervalo +/-R. Aumentando E, aumenta-se enormemente a faixa dos números que podem ser representa​dos mas resulta numa distribuição mais esparsa dos números dentro dessa faixa 
Normalização: A representação de números ponto flutuante é inerentemente redundante no sentido que o mesmo número pode ser representado em mais de uma forma. Por exemplo, 1,0 x 1018, 0,1 x 1019, 1000000 x 1012, e 0,000001 x 1024 são equivalentes. Geralmente é desejável especificar uma forma única (normal) para a representação de números ponto flutuante num computador. Só a parte fracionária da mantissa é representada internamente no computador. A intenção da normalização é garantir o máximo de bits possíveis da mantissa para representar o número, procurando não deixar, na medida do possível, zeros a direita da vírgula binária. A normalização restringe a magnitude |M| de uma mantissa fracionária à faixa (para números com B = 2):
	0,5 <= |M| < 1 ou M = 0
	O expoente pode ser representado em complemento de dois.
	Ex.1: Formato de um número ponto flutuante de 32 bits:
 -----------------------------------------------------
 |(1)| (7) | (24) 	 |
 -----------------------------------------------------
 sinal expoente mantissa fracionária
 do número com sinal
 ---------------------------------------------------
 | 0 | 0001001 | 001... 	 |
 ---------------------------------------------------
 
 + 0,001... x 29 => valor não normalizado
 ---------------------------------------------------
 | 0 | 0000111 | 1... 	 |
 ---------------------------------------------------
 + 0,1... x 27 => valor normalizado
�
	Ex.2: Normalização hexadecimal com expoente em excesso-64:
 -------------------------------------------
 | 1 | 1000011 | 00000101... |
 -------------------------------------------
 - 0,00000101... x 163 => não normalizada
 -------------------------------------------
 | 1 | 1000010 | 0101... 	 |
 -------------------------------------------
 
 - 0,0101... x 162 => normalizada
	Nota: Em hexadecimal, 4 bits para cada dígito do expoente, pois 1 dígito hexadecimal corresponde a 4 bits.
	Ex.3: Mantissa decimal, Base hexadecimal
 -------------------------------------------
 | 0 | 1000101 | 0010... 	 |
 -------------------------------------------
 + 0,125 x 165
 -------------------------------------------
 | 1 | 0111011 | 0010... 	 |
 -------------------------------------------
 - 0,125 x 16-5
	Nota: Neste exemplo, já estão normalizadas as representações, pois sobrou menos de 4 bits 0 a direita da vírgula (cada dígito hexadecimal corresponde a 4 bits).
	Para a representação interna de um número ponto flutuante, pode-se não ter a representação exata do número. Na maioria das vezes tem-se uma aproximação. Esta aproximação é tanto mais real quanto maior for o número de bits reservados para a representação da mantissa fracionária (precisão).
Exemplo 4 : usando a regra de Normalização do Padrão IEEE 754 :
	Qual seria a precisão e a faixa de valores possíveis para um número ponto flutuante representado no formato do primeiro exemplo deste tópico “normalização” ? Como se representaria o número zero neste formato?
	As respostas para essas perguntas são as seguintes: a precisão do número é dada pela mantissa. Pois bem, se para a mantissa são reservados 24 bits, então a precisão da número seria de 224 = 16.777.216. A faixa de valores possíveis é dada pela Base e pelo expoente. Tem-se 7 bits para o expoente com sinal, logo, tirando o bit de sinal, sobra 6 bits para o expoente, que pode estar na faixa de -26 até +26-1 = -64 até +63. Logo, a faixa de valores possíveis, que inclui a Base fica de 2-64 até 2+63.
	A representação do zero tem alguns problemas. A mantissa, claro, deve ser zero, mas o expoente pode ter qualquer outro valor pois 0 x BE = 0 para todos os valores de E. Freqüentemente, o que acontece devido aos erros de arredondamento, quando se quer computar o zero, a mantissa é muito pequena, mas não exatamente zero. Para o número inteiro ser próximo de zero, seu expoente deve ser um número negativo grande. Se k bits são reservados para o expoente, incluindo seu sinal (no caso 7), então todos os números entre -2k-1 e +2k-1 -1 podem ser representados (no caso entre -64 e +63). O expoente -2k-1 seria usado no formato normal para o zero.
	Uma segunda complicação vem do fato de que é desejável que o zero seja representado por uma seqüência de bits 0 apenas, a princípio para facilitar a implementação de instruções que testam o zero. Ao expoente, consistindo de uma seqüência de zeros, deve então ser atribuído o valor -2k-1. Isto sugere que os expoentes sejam codificados em um código excesso-2k-1 similar ao código excesso-3 (ver próximo sub-item), onde o campo do expoente contém o expoente real mais 2k-1. A quantidade 2k-1 é chamada de polarizador, e um expoente codificado desta maneira é chamado de expoente polarizado ou característica. A figura abaixo mostra todos os valores de um expoente de 4 bits com polarização 8 (código excesso-8):
 Expoente Número representado
 1111 +7
 1110 +6
 1101 +5
 1100 +4
 1011 +3
 1010 +2
 1001 +1
 1000 0
 0111 -1
 0110 -2
 0101 -30100 -4
 0011 -5
 0010 -6
 0001 -7
 0000 -8
Complementos
	A desvantagem do desperdício de um bit, apenas para armazenamento de sinal, foi resolvida adotando-se as chamadas notações de complemento onde o dígito mais significativo é usado ao mesmo tempo para representação do sinal (segundo a convenção de sinal e magnitude), e de parte do número. A convenção adotada é que números positivos têm sua representação em complemento idêntica a representação normal (devem ser sempre no entanto iniciados com zero); no caso da representação negativa é que existirão diferenças, mas sempre um número negativo deverá começar com 1.
Complemento de 1
	Seja, por exemplo, um número inteiro positivo N com b bits, onde o bit mais significativo deve ser zero. O seu equivalente negativo representado em complemento de 1 é calculado subtraindo-se cada dígito de N de 1:
	510 = 01012	=> complemento de 1 =>	11112
						01012 -
						------
						10102 = -510
	Por estar em base binária, o complemento de 1 também pode ser obtido de forma mais simples do que pela definição, simplesmente complementando-se (invertendo-se) os bits do número, substituindo-se “zeros” por “uns” e vice-versa.
	O complemento de 1 não resolve o problema da dupla representação do zero, representado por 0000 e 1111, mas permite operações aritméticas mais simples do que com números representados em sinal e magnitude.
	- 410				1 0 1 12
	+ 110				0 0 0 12 +
	------				----------
	- 310				1 1 0 02 = - 310, correto!
	A resposta obtida é o número negativo -3, representado em complemento de 1. Entretanto quando dois números negativos são somados, o bit de carry deve ser adicionado ao resultado para obtenção do valor correto, como no exemplo a seguir:
	- 210				 1 1 0 12
	- 410				 1 0 1 12
	------				-----------
	- 610				1 1 0 0 02 ( = - 710 = errado!!)
					somando-se o carry ao resultado tem-se:
					1 0 0 02
					0 0 0 12 + (bit de carry)
					----------
					1 0 0 12 ( = -610 = correto.)
Complemento de 2
	A solução para os problemas do dupla representação do zero e de aritmética com números negativos surgiu com a definição do complemento de 2, obtido através dos passos:
Calcule o complemento de 1 do número
Some 1 ao valor calculado para obter o complemento de 2.
	O uso do complemento de 2 elimina a necessidade de subtrações nos computadores, simplificando o hardware. A subtração é feita somando-se ao minuendo o complemento de 2 do subtraendo. O bit de carry final do resultado deve ser desprezado.
	7110			 0 1 0 0 0 1 1 12
	3510 -			 1 1 0 1 1 1 0 12 +
	-----			--------------------
	3610			1 0 0 1 0 0 1 0 02 = 3610
Quando o resultado for negativo, o que se obtém é o seu complemento de 2.
	3510			 0 0 1 0 0 0 1 12
	7110 -			 1 0 1 1 1 0 0 12 +
	-----			--------------------
	- 3610			1 1 1 0 1 1 1 0 02 = DC16 (complemento de 2 de - 3610)
Caracteres
A necessidade de armazenamento e transmissão de informações textuais entre computado​res levou a definição de códigos em que combinações de bits representam letras, algaris​mos numéricos usados em texto, pontuação, etc, e onde cada valor de código corresponde a um caractere. Os primeiros códigos de caracteres usavam combinações de 6 bits, pois 6 era o valor mínimo de bits para criar combinações de números em quantidade suficiente para representar as 26 letras do alfabeto inglês, e os 10 dígitos decimais (com 6 bits temos 26 = 64 combinações diferentes, cada caracter sendo representado por um número de 6 bits). Os 6 bits também permitiam um número razoável (28) de caracteres especiais como ponto, vírgula e símbolos matemáticos. Mais recentemente têm predominado o uso de seqüências de 7 e 8 bits para representação de caracteres, pois permitem caracteres adicio​nais, como alfabeto maiúsculo e minúsculo, e mais caracteres simbólicos, de acentuação, e de controle (+ - / , : ; LF CR EOT). O código mais usado para representar caracteres é o ASCII (“American Standard Code for Information Interchange”) desenvolvido para carac​teres não acentuados, sumariado a seguir. Em português é preferível usar o código ASCII estendido, que inclui caracteres acentuados.
Outro código padrão de caracteres de 8 bits é o EBCDIC (Extended Binary Coded Decimal Interchange Code) desenvolvido pela IBM.
Códigos de Caracteres Decimais
	Vimos que, como nós usamos no dia a dia aritmética decimal, os números para serem entrados num computador, devem ser primeiro convertidos da representação decimal para a binária. Similarmente, a conversão binária-decimal faz parte do processo de saída de um computador. O armazenamento de números decimais no formato de texto ( 1 dígito decimal em cada byte ), usando por exemplo a tabela ASCII, também requer a conversão decimal-binária.
	Muitos códigos numéricos são usados para permitir uma conversão rápida de números binários para números decimais. São os códigos decimais:
Dígito 			CÓDIGO DECIMAL
Decimal 	BCD EBCDIC 	ASCII Excesso-3 	2-entre-5
 0 	 	0000 	11110000 	00110000 	0011 	11000 
 1 	 	0001 	11110001 	00110001 	0100 	00011
 2 	0010 	11110010 	00110010 	0101 	00101
 3 	0011 	11110011 	00110011 	0110 	00110
 4 	0100 	11110100 	00110100 	0111 	01001
 5 	0101 	11110101 	00110101 	1000 	01010
 6 	0110 	11110110 	00110110 	1001 	01100
 7 	0111 	11110111 	00110111 	1010 	10001
 8 	1000 	11111000 	00111000 	1011 	10010
 9 	1001 	11111001 	00111001 	1100 	10100
	BCD - Binary Coded Decimal: cada dígito di é representado por seu equivalente de 4 bits bi.3bi.2bi.1bi.0 na forma binária padrão: 971 em BCD é 1001 0111 0001 .
	EBCDIC - Extended BCD Interchange Code: representa os 10 dígitos decimais num campo de 4 bits da mesma forma que em BCD. Os outros 4 bits (o campo "zonado") não são usados para representação de dados numéricos.
	ASCII - usa o mesmo princípio de EBCDIC. 25 em ASCII é: 00110010 00110101
	Excesso-3: É formado adicionando 0011 (3) ao correspondente número BCD, daí o nome. Este código tem a vantagem de poder ser processado usando a mesma lógica usada para códigos binários. Algumas operações aritméticas são difíceis de implementar usando código excesso-3, principalmente porque é um código "sem-peso" (não posicional).
	2-entre-5: cada dígito decimal é representado por uma seqüência de 5 bits contendo dois 1's e três 0's. Existe exatamente 10 seqüências distintas deste tipo. O maior mérito deste código é ser um detetor de erro simples, pois mudando-se qualquer bit, resulta numa seqüência que não tem correspondente válido no código. Suas desvantagens é que é um código "sem peso" e usa 5 ao invés de 4 bits por código decimal.
	A principal vantagem dos códigos decimais é a facilidade de conversão entre a representação interna do computador que permite apenas os símbolos 0 e 1 e representações externas que usam os dez símbolos decimais 0,1,2,...,9. Os códigos decimais têm suas desvantagens:
Eles usam mais bits para representar um número do que os códigos binários, portanto requerem mais espaço de memória;
Os circuitos necessários para implementar aritmética usando operandos decimais são mais complexos do que para aritmética binária.
	
 	Ex.: 95 + 15 em BCD: 1001.0101
 	 	0001.0101
 	 	------------
 	 	1010.1010 SYMBOL 185 \f "Symbol" 110 emBCD!
	
	Alguns comentários a respeito da estrutura dos códigos ASCII e EBCDIC são úteis. Note que em ambos os códigos, os 4 bits menos significativos dos códigos de caracteres decimais (0-9) são os códigos BCD já vistos. Isto facilita duas operações. Primeiro, a comparação de dois caracteres que representam dígitos decimais para determinar qual é o maior, pode ser feito com o mesmo tipo de circuito lógico que é usado para implementar as operações aritméticas padrões para números binários. Segundo, quando é determinado pelo contexto que o código de 7 ou 8 bits em alguma entrada representa um número decimal que está para ser armazenado e processado como uma entidade única, então é prático, algumas vezes, remover os 3 ou 4 bits mais significativos de cada código do dígito e comprimir o número, que vira um dígito BCD de 4 bits. Comentários similares valem para os caracteres alfabéticos. O fato de eles estarem em seqüência numérica facilita o arranjo em ordem alfabética. (Ver tabelas ASCII e EBCDIC).
Paridade
Paridade de um caractere é um bit extra usado para detecção de erro simples (como no caso do código 2-entre-5). Existem dois tipos de paridade: paridade par e paridade ímpar. Quando o número de bits 1 do caractere é par, o bit de paridade par é 0 e o bit de paridade ímpar é 1.
Tabela ASCII
�
�Aritmética Binária
�
Adição
A adição binária obedece às leis convencionais adotadas para o sistema de numeração dec​imal, conforme a tabela 4.1, onde estão as combinações possíveis para a adição de um par de bits. A última coluna diz respeito ao bit que é “carregado” (carry) ou “vai-um” para a casa binária seguinte.
	ADENDO
	AUGENDO
	RESULTADO
	“VAI-UM”
	0
	0
	0
	0
	0
	1
	1
	0
	1
	0
	1
	0
	1
	1
	0
	1
Como exemplo de adição, seja a soma dos números binários equivalentes aos decimais 35 e 71:
	3510			0 0 1 0 0 0 1 12
	7110 +			0 1 0 0 0 1 1 12 +
	--------			------------------
	10610			0 1 1 0 1 0 1 02
Subtração
Também obedece às leis convencionais conforme a tabela abaixo, onde estão as combinações possíveis para a subtração de um par de bits. A última coluna refere-se ao bit “empres​tado” da casa binária à esquerda também chamado de “borrow” ou de “vem-um” :
	MINUENDO
	SUBTRAENDO
	RESULTADO
	“EMPRESTA-UM”
	0
	0
	0
	0
	0
	1
	1
	1
	1
	0
	1
	0
	1
	1
	0
	0
Como exemplo, seja a subtração dos mesmos números usados no exemplo anterior. Note que é necessária a inversão dos valores colocando-se o número maior em módulo (no caso um número negativo) como minuendo.
	7110 			0 1 0 0 0 1 1 12 
	3510 -			0 0 1 0 0 0 1 12 -
	--------			------------------
3610			0 0 1 0 0 1 0 02
Multiplicação
Seguem as regras da multiplicação, definidas na tabela abaixo:
	MUTIPLICANDO
	MULTIPLICADOR
	RESULTADO
	0
	0
	0
	0
	1
	0
	1
	0
	0
	1
	1
	1
Como exemplo de multiplicação, seja a multiplicação dos números 3 e 4 :
 4 ...................... 1 0 0
 3 ...................... 0 1 1 x
 -------------
 1 0 0
 1 0 0 + 
 --------------
12 .................. 1 1 0 0
Divisão
Seguem as regras da divisão, conforme tabela abaixo. A tabela não contém os casos de divisão por zero, pois tais casos são proibidos, qualquer que seja a base de representação. 
	DIVIDENDO
	DIVISOR
	QUOCIENTE
	0
	1
	0
	1
	1
	1
Exemplo: 1 1 0 0 1 0 / 101
			 1 1 0 0 1 0 |	1 0 1 .
			- 1 0 1		1 0 1 0
 ____
 0 0 1 0 1
- 1 0 1
			 ________
			 0 0 0 0 | … 0
�PAGE �
� PAGE \* MERGEFORMAT �46�