Você está na página 1de 0

8-1

Captulo
OITO
Codificaes BCD, Numrica e Alfanumrica
8. 1 Nmeros e Aritmtica BCD
Os computadores digitais atuais trabalham com nmeros binrios, uma vez que isto facilita
enormemente a construo destes computadores. No dia-a-dia, entretanto, o sistema decimal
largamente utilizado (ainda!). Isto obriga a existncia de rotinas de converso de nmeros
decimais para binrio e vice-versa; estas rotinas existem em todos os computadores atuais.
Nos computadores mais antigos, entretanto, procurou-se desenvolver uma aritmtica binria
que operasse com dgitos decimais, de forma a facilitar estas rotinas de converso. Neste
sistema, em desuso nos dias de hoje, um grupo codificado de quatro bits utilizado para
representar cada um dos dez dgitos decimais. Esta a base do sistema BCD (Binary Coded
Decimal Decimal Codificado em Binrio).
Com quatro bits podem ser codificadas 16 combinaes distintas (de 0000 a 1111), mas
existem somente 10 dgitos binrios (de 0 at 9). Com isto tem-se 16!/6! = 2,9x10
10
diferentes possibilidades para implementar-se uma codificao BCD. Algumas das
combinaes mais usuais so ilustradas na tabela apresentada a seguir. A segunda coluna
utiliza o NBCD (Natural BCD), visto que os dgitos so codificados de acordo com sua
representao em binrio (com pesos 8,4, 2 e 1 para cada bit). O cdigo de Aiken usa os
pesos 2, 4, 2 e 1 para cada bit, enquanto que o cdigo de Stibitz (tambm chamado de
excesso de 3) usa os mesmos pesos do NBCD, mas soma trs a cada representao. O
cdigo 7421 usa os pesos 7, 4, 2 e 1, enquanto que o cdigo 642-1 utiliza os pesos 6, 4, 2 e
1.
Dgito decimal Cd. NBCD
(8421)
Cd.Aiken
(2421)
Cd.Stibitz
(8421 3)
Cd.7421
(7421)
Cd. 642-1
(642-1)
0 0000 0000 0011 0000 0000
1 0001 0001 0100 0001 0011
2 0010 0010 0101 0010 0010
3 0011 0011 0110 0011 0101
4 0100 0100 0111 0100 0100
5 0101 1011 1000 0101 0111
6 0110 1100 1001 0110 1000
7 0111 1101 1010 0111 1011
8 1000 1110 1011 1001 1010
9 1001 1111 1100 1010 1101
Tabela 8.1 - Codificaes BCD
Por sua proximidade do sistema binrio, a codificao NBCD a mais utilizada, e
denominada por muitos autores simplesmente por BCD, e a aritmtica com este cdigo
denominada de aritmtica BCD. Nesta aritmtica, os dgitos decimais so operados em
binrio, agrupados de quatro em quatro. Quando se soma dois dgitos BCD em binrio, o
dgito resultado pode estar em um de trs casos:
1. Dgito legal (entre 0 e 9), sem vai-um. Neste caso o resultado est correto, e no
existe vai-um para o dgito seguinte.
8-2
2. Dgito ilegal sem vai-um. Neste caso o resultado est entre 10 e 15 (em binrio); para
obter-se o dgito correto deve-se subtrair 10 do dgito (ou somar seis, o que
equivalente), e gerar-se um vai-um para o dgito decimal seguinte.
3. Dgito legal com vai-um. Este caso ocorre quando o resultado cai entre 16 e 19; da
mesma maneira que o caso 2, para obter-se o dgito correto deve-se subtrair 10 do
dgito (ou somar seis). O vai-um gerado est correto.
Por exemplo, seja A=0832 e B=0983. Ento tem-se:
A = 0000 1000 0011 0010
B = 0000 1001 1000 0011
0001 0001 1011 0101
caso 1 caso 3 caso 2 caso 1
Para corrigir o resultado, deve-se somar seis nos dgitos dos casos 2 e 3. No caso 2, ainda
necessrio propagar um vai-um (isto no necessrio no caso 3, pois o vai-um j foi
gerado).
1
0001 0001 1011 0101
0110 0110
0001 1000 0001 0101
Com isto tem-se 1815, que o resultado correto. Uma desvantagem da correo do resultado
dessa maneira que as correes do tratamento do vai-um no caso 2 podem criar novas
correes, como por exemplo no caso de A=0372 e B=0633:
A = 0000 0011 0111 0010
B = 0000 0110 0011 0011
0001 1001 1010 0101
caso 2
Com a correo do caso 2, tem-se:
1
0000 1001 1010 0101
0110
0000 1010
caso 2
0000 0101
E a nova correo deste novo caso 2 fornece o resultado correto (1005). Para evitar este
tratamento especial, foi criado o algoritmo de Hellerman, que soma 6 em todos os dgitos de
um dos operandos antes da soma das duas parcelas. Assim, s existem dois casos a serem
tratados, distinguidos pelo vai-um:
1. O resultado no deu vai-um e ento caiu entre 6 e 15. Deve-se subtrair 6 para obter o
dgito correto.
2. O resultado produziu um vai-um. Ento este vai-um j foi propagado e o dgito
est correto entre 0 e 9.
Por exemplo, seja A=0372 e B=0633. Ento tem-se:
A = 0000 0011 0111 0010
soma de 6 0110 0110 0110 0110
0110 1001 1101 1000
Se a primeira etapa produzir um vai-um entre dgitos decimais, isto significa que o dgito
original do operando ter sido ilegal; este nmero est mal representado. A segunda etapa
realiza a soma de (A+6) com o segundo operando (B):
8-3
1 1
A+6= 0110 1001 1101 1000
B= 0000 0110 0011 0011
0111
caso 1
0000
caso 2
0000
caso 2
1011
caso 1
Na terceira e ltima etapa, ao invs de subtrair 6 (0110), soma-se 10 (1010) e ignora-se o
vai-um).
0111 0000 0000 1011
1010 1010
0001 0000 0000 0101
O resultado, 1005, j est correto.
Para a subtrao utilizam-se tcnicas semelhantes. Para maiores detalhes sobre aritmtica
BCD pode-se consultar o livro Projeto de Computadores Digitais, de Glen George
Langdon Jr. e Edson Fregni, captulo 2 (Cdigos, nmeros e aritmtica). As operaes de
diviso e multiplicao operam de forma semelhante aos mtodos utilizados na nossa
aritmtica decimal, mas atuando sobre cada dgito BCD individualmente. Estas operaes
no possuem hoje em dia nenhum interesse prtico e, devido s extenses dos seus
algoritmos, no sero abordadas aqui.
8. 2 Codificao
Os computadores atuais trabalham unicamente com dgitos binrios (bits); nenhum outro
smbolo utilizado. Qualquer informao, seja ela numrica ou alfabtica, deve ser
representada utilizando-se combinaes adequadas destes bits. A este processo genrico de
representao d-se o nome de codificao, ou seja, um mapeamento entre os smbolos
utilizados externamente ao computador e os grupos de bits escolhidos para representar estes
smbolos.
Todas as representaes de nmeros vistas at o momento (inteiros positivos,
sinal/magnitude, complemento de um, complemento de dois, ponto fixo, ponto flutuante,
BCD) so exemplos de codificaes. O objetivo comum a todas estas codificaes era
representar nmeros no sistema de numerao arbico; para cada codificao foram
estudadas a maneira de representar os nmeros no sistema binrio e inclusive a maneira de
operar com estes nmeros codificados.
Diversas outras aplicaes, entretanto, tambm utilizam cdigos. Assim, tem-se cdigos
desenvolvidos para manipular caracteres alfanumricos, smbolos especiais (pontuao,
letras gregas, etc), smbolos matemticos, e toda a gama de informao que deve ser
manipulada ou armazenada em um computador.
De uma forma geral, se uma determinada codificao utiliza n bits, podem ser
representados 2
n
smbolos distintos, ou seja, tem-se 2
n
combinaes distintas que podem ser
realizadas com estes n bits. Os cdigos no necessitam utilizar todas as combinaes
possveis (como o caso dos cdigos BCD), nem a informao necessita estar codificada de
forma inequvoca (como o caso do duplo zero em sinal/magnitude ou de nmeros no
normalizados em ponto flutuante). Cada sistema de codificao pode estabelecer suas
prprias regras de formao e manipulao dos grupos de bits.
8. 3 Cdigos BCD (ou cdigos de 4 bits ponderados)
Conforme j foi visto, nos cdigos BCD um grupo codificado de quatro bits utilizado para
representar cada um dos dez dgitos decimais. Como uma metodologia para realizar
8-4
operaes aritmticas estes cdigos esto em desuso, mas como uma maneira de armazenar
nmeros decimais eles ainda so utilizados.
Como j foi visto, existem 2,9x10
10
diferentes possibilidades para implementar-se uma
codificao BCD. Algumas delas foram analisadas no captulo anterior. Dois dos cdigos
BCD ainda so bastante utilizados hoje em dia: o BCD natural e o cdigo em excesso-de-trs
(Stibitz). Ambos esto reproduzidos abaixo:
Dgito decimal NBCD
(8421)
Excesso-de-3
(8421 3)
0 0000 0011
1 0001 0100
2 0010 0101
3 0011 0110
4 0100 0111
5 0101 1000
6 0110 1001
7 0111 1010
8 1000 1011
9 1001 1100
Tabela 8.2 - Cdigos BCD de 4 bits
O cdigo BCD natural tem uma correspondncia natural entre os dgitos decimais e a
codificao binria. Os prprios pesos das posies binrias seguem os valores utilizados no
sistema arbico (8, 4, 2 e 1). O cdigo em excesso de trs tambm tem os mesmos pesos,
mas a cada codificao binria soma-se 3.
Para o cdigo NBCD (denominado simplesmente de BCD) foi desenvolvida uma aritmtica
binria, conforme j foi visto anteriormente.
O mesmo ocorre com o cdigo de excesso-de-trs, que possui duas vantagens: nenhum
cdigo utiliza a combinao 0000, e o cdigo auto-complementado para 9, ou seja, para se
obter o complemento de 9 de um cdigo decimal, basta inverter todos os bits.
A aritmtica em excesso de 3 relativamente fcil. Quando dois dgitos em excesso de 3 so
somados, o resultado ser em excesso de 6, e tem-se dois casos a tratar:
A soma dos dois dgitos nove ou menos. Neste caso, a soma em excesso resultar
em um dgito que 15 ou menos, e nenhum carry ser gerado. Nestes casos, basta
subtrair 3 do resultado para obter o dgito corretamente codificado em excesso de 3.
A soma dos dois dgitos 10 ou mais. Neste caso, a representao em excesso ser
16 ou mais. Como X e X+16 tem o mesmo cdigo, a diferena est na gerao de
um vai-um. Para corrigir o resultado, ou seja, representar X em excesso de 3,
basta somar 3.
Assim, a regra para a soma em excesso de trs simples: soma-se os dgitos usando
aritmtica binria; se um vai-um gerado, somar 3 (0011) ao dgito decimal; seno,
subtrair 3 (0011) ao dgito decimal (ou somar 1101 e desprezar o vai-um).
Diversos outros cdigos tambm podem ser desenvolvidos atribuindo-se pesos distintos s
diversas posies; o nome destes cdigos normalmente formado pelos pesos. Abaixo so
exemplificados alguns deles (4221, 2421 (Aiken), 5421, 7421, e 642(-1), com peso
negativo). Note-se que a escolha dos pesos no determina de forma inequvoca a
codificao, mas apenas facilita sua compreenso. Assim, por exemplo, no cdigo 4221 o
dgito decimal 2 pode ser codificado tanto por 0010 (como na tabela) como por 0100; o
dgito 6 poderia ser codificado como 1010 ou por 1100 (esta ltima utilizada na tabela).
8-5
Dgito decimal 4221 2421 5421 7421 642(-1)
0 0000 0000 0000 0000 0000
1 0001 0001 0001 0001 0011
2 0010 0010 0010 0010 0010
3 0011 0011 0011 0011 0101
4 1000 0100 0100 0100 0100
5 0111 1011 1000 0101 0111
6 1100 1100 1001 0110 1000
7 1101 1101 1010 0111 1011
8 1110 1110 1011 1001 1010
9 1111 1111 1100 1010 1101
Tabela 8.3 - Cdigos BCD pouco utilizados
Cada um destes cdigos sempre desenvolvido com algum propsito ou aplicao especfica
em mente. Por exemplo, o cdigo 4221 auto-complementado em 9 (como o so todos os
cdigos cuja soma dos pesos 9). Nenhum dos cdigos da tabela anterior, entretanto,
apropriado para operaes aritmticas.
Outros cdigos possveis seriam 5221, 5321, 6331, 5211, 6321, 7321, 4421, e 6421.
Tambm so possveis cdigos com pesos negativos, como 531(-1), 522(-1), 732(-1), e
621(-1). Apesar de possveis, nenhum destes cdigos j foi utilizado em qualquer aplicao
prtica. Seu estudo foi meramente terico.
8. 4 Cdigos de cinco bits ponderados
Vrias mquinas (j ultrapassadas) foram desenvolvidas utilizando cinco bits ponderados. O
cdigo 74210, ilustrado na tabela a seguir, um destes cdigos. Ele ainda possui a
vantagem adicional de que todos os dgitos codificados contm dois e somente dois bits em
um, o que facilita a verificao se uma palavra pertence ao cdigo ou no.
Dgito decimal Cd. 74210
0 11000
1 00011
2 00101
3 00110
4 01001
5 01010
6 01100
7 10001
8 10010
9 10100
Tabela 8.4 - Cdigo BCD de 5 bits
Os dois uns em cada dgito decimal torna possvel a deteco de erros simples (erro em um
nico bit) em cada dgito. Qualquer dgito que no apresentar uns, ou somente um um,
ou mais de dois uns pode ser facilmente identificado como errneo. O valor zero
(codificado como 11000) est contra os pesos utilizados, mas foi assim codificado para
manter a regra dos dois uns.
8. 5 Cdigos de sete bits ponderados
Um cdigo de sete bits ponderados foi utilizado pela IBM, no modelo IBM 650. Este
cdigo, de sete bits com pesos 5043210, tambm denominado de biquinrio. Ele possui
dois grupos de bits, um com dois e outro com cinco bits. Este cdigo tambm pode ser
considerado como um cdigo m de n (veja-se seo 8.8).
8-6
Dgito decimal 50 43210
0 01 00001
1 01 00010
2 01 00100
3 01 01000
4 01 10000
5 10 00001
6 10 00010
7 10 00100
8 10 01000
9 10 10000
Tabela 8.5 - Cdigo BCD de 7 bits
Nos sete bits de qualquer palavra de cdigo, somente dois bits esto em um, os demais so
zeros. Alm disto, um destes uns est no grupo da esquerda (de dois bits) e o outro um
est no grupo da direita (de cinco bits). Qualquer cdigo com uma quantidade de uns
diferente de dois, ou com mais de um um em cada grupo, indica um dgito invlido ou
ento um erro. O grupo esquerda indica se o dgito menor ou igual a quatro ou ento
maior ou igual a cinco. Operaes aritmticas podem ser realizadas com relativa facilidade, o
que contribuiu para o seu uso. As operaes aritmticas esto baseadas no fato de um dgito
ser incrementado de uma unidade deslocando-se o 1 para a esquerda. Atualmente este
cdigo caiu em desuso, exceto para algumas aplicaes especficas.
Um cdigo semelhante o qui-binrio, com pesos 8, 6, 4, 2, 0 / 1, 0.
8. 6 Cdigos Gray (ou cdigos cclicos)
Estes cdigos no so utilizados para clculos aritmticos, mas sim para indicar a variao de
grandezas analgicas (temperatura, ngulo, presso, voltagem, etc) em forma digital. Estas
grandezas no alteram seus valores de forma brusca, mas sim variam de um valor para outro
de forma contnua. Assim, os cdigos de Gray foram desenvolvidos de tal forma que, ao se
avanar de um nmero para o seguinte, somente um bit do cdigo varia, ou seja, dois
cdigos adjacentes se diferenciam somente por uma posio binria. Existem diversas
possibilidades para os cdigos cclicos. O cdigo Gray mais comum (denominado
simplesmente de cdigo Gray) mostrado na Tabela 8.6 a seguir.
Dgito decimal Cd. Gray
0 0000
1 0001
2 0011
3 0010
4 0110
5 0111
6 0101
7 0100
8 1100
9 1101
10 1111
11 1110
12 1010
13 1011
14 1001
15 1000
Tabela 8.6 - Cdigo Gray de 4 bits
8-7
Note-se que todas as 16 combinaes possveis esto presentes; no existem combinaes
ilegais ou que indiquem erro. Mas de um cdigo para o seguinte sempre existe somente um
bit que varia o seu valor.
Compare-se, por exemplo, a variao de 3 para 4. Em binrio, isto implicaria a variao do
cdigo 0011 para 0100, com a troca de valor de trs dgitos binrios. No cdigo Gray visto
na Tabela 8.6, a variao de 0010 para 0110, com a troca de somente um bit. Note-se
tambm que o cdigo cclico, ou seja, do valor 15 para zero (ou vice-versa) tambm existe
a variao de somente um bit.
Para este cdigo Gray pode-se desenvolver procedimentos de converso para decimal e
binrio. Um nmero decimal pode ser convertido para Gray convertendo-se primeiramente
este nmero para binrio. A seguir, cada bit somado em mdulo dois com o bit esquerda
(a soma em mdulo dois uma soma sem vai-um, ou seja, o resultado somente um
quando os dois operandos forem diferentes).
Por exemplo, o nmero decimal 45 representado por 0101101 em binrio. E a converso
para cdigo Gray produz:
0 1 0 1 1 0 1

1 1 1 0 1 1
Assim, o cdigo Gray de 45 111011.
Converter do cdigo Gray para decimal realizado primeiro convertendo-se de Gray para
binrio e depois para decimal. A converso para binrio realizada analisando-se os bits da
esquerda para a direita. Os zeros bits de mais alta ordem so mantidos inalterados at o
primeiro 1, inclusive. A partir da, os bits zero so invertidos para um at o prximo 1.
Este 1 tambm invertido para zero, e os zeros seguintes so copiados inalterados at o
prximo 1 (que tambm copiado). Passa-se ento inverso at o prximo 1, a partir
do qual copia-se normalmente at o 1 seguinte, e assim por diante at serem analisados
todos os bits.
Por exemplo, seja o cdigo Gray 001001011. Convertendo-o para binrio tem-se:
001 Copia-se todos os zeros at o primeiro 1.
001110 Inverte-se os bits seguintes at o prximo 1.
00111001 Copia-se todos os bits at o 1 seguinte.
001110010 Inverte-se os bits at o prximo 1.
Ou seja, obtm-se 001110010, que corresponde em decimal a 114. Note-se que a regra geral
alterna entre cpia dos bits e a inverso dos bits; cada bit em 1 indica que deve ser realizada
uma troca (deste 1 inclusive).
Este cdigo Gray em particular um cdigo binrio refletido. Um cdigo dito refletido
quando ele simtrico (com exceo do bit de mais alta ordem) em relao ao ponto mdio
da lista codificada em ordem crescente de valor. Os cdigos Gray que no so refletidos so
complexos de serem codificados.
Existem diversos cdigos Gray com diferentes tamanhos de ciclo (nmeros de cdigos
distintos utilizados). Normalmente eles so referenciados pelo tamanho do seu ciclo e por
uma lista de nmeros. Por exemplo, o cdigo Gray visto acima referenciado como sendo
de ciclo 16 (1,2,1,3,1,2,1,4,1,2,1,3,1,2,1,4). Os nmeros da lista indicam a posio (a
partir da direita) do bit que invertido no cdigo atual para formar o prximo cdigo. A
codificao pode iniciar em qualquer nmero binrio (no caso do exemplo, um nmero de 4
bits). Por exemplo, um cdigo Gray de comprimento 6 (1,2,1,3,2,3) ser diferente se
iniciado em nmeros binrios diferentes, conforme pode ser visto na tabela a seguir.
8-8
Dgito Codificao inicial em:
decimal 000 001 010 011 100 101 110 111
0 000 001 010 011 100 101 110 111
1 001 000 011 010 101 100 111 110
2 011 010 001 000 111 110 101 100
3 010 011 000 001 110 111 100 101
4 110 111 100 101 010 011 000 001
5 100 101 110 111 000 001 010 011
6 000 001 010 011 100 101 110 111
Tabela 8.7 - Codificao de cdigo Gray
Assim, para caracterizar inequivocamente um cdigo Gray, alm do comprimento e da
seqncia de formao, tambm deve-se indicar a codificao inicial. Uma lista de alguns
cdigos possveis fornecida abaixo:
para dois bits: Comprimento 4 (1,2,1,2)
para trs bits: Comprimento 6 (1,2,1,3,2,3)
Comprimento 6 (1,2,3,1,2,3)
Comprimento 8 (1,2,1,3,1,2,1,3)
para quatro bits: Comprimento 8 (1,2,3,4,1,4,3,2)
Comprimento 10 (1,2,1,3,4,3,1,2,1,4)
Comprimento 10 (1,2,1,3,4,1,2,1,3,4)
Um cdigo Gray de 5 bits de comprimento 10, comumente utilizado em operaes de
contagem, o cdigo caminhante (do ingls walking code ou creeping code):
Dgito Cdigo
0 00000
1 00001
2 00011
3 00111
4 01111
5 11111
6 11110
7 11100
8 11000
9 10000
Tabela 8.8 - Cdigo Gray de 5 bits
A razo para o uso deste cdigo est na sua facilidade de implementao. Para avanar o
contador de uma unidade, basta mover todos os bits para a esquerda, inverter o bit mais
significativo e coloc-lo na posio mais direita (bit menos significativo).
8. 7 Cdigos de deteco e correo de erros
Quando informao transferida de uma seo para outra do computador, ou mesmo entre
dois computadores, no incomum a ocorrncia de erros, sejam eles devidos a rudos
eletromagnticos ou ao mau funcionamento de um componente. Se uma codificao binria
de n bits utiliza todas as combinaes possveis (2
n
), ento erros no podem ser nem
detectados nem corrigidos. Como todas as combinaes so vlidas, no existem
combinaes invlidas. Um erro sempre ir transformar uma codificao vlida em outra
codificao tambm vlida.
Para ser possvel a deteco de erros, e at mesmo sua correo, deve-se introduzir
redundncia na codificao, seja na forma de bits extras ou do uso de combinaes invlidas.
8-9
Trs tcnicas principais sero analisadas nas sees seguintes: cdigos m-de-n, cdigos com
paridade e cdigos de Hamming. Todos estes cdigos utilizam o mesmo comprimento em
bits para sua codificao. Existem cdigos de comprimento varivel, em que os smbolos
mais freqentes utilizam menos bits que os smbolos menos freqentes. Assim, por
exemplo, a codificao da letra e utilizaria muito menos bits que a letra q. Estes cdigos,
como por exemplo cdigo Morse, cdigo de Shannon-Fano, cdigo de Huffman, no sero
analisados aqui.
8. 8 Cdigos m-de-n
Os cdigos m-de-n so compostos de tal forma que os n bits de uma palavra binria so
formados por m uns e n-m zeros. Com esta limitao, de 2n combinaes binrias
possveis somente (
n
/
m
) combinaes, ou seja, n!/m!(n-m)!. Este nmero de combinaes
maximizado quando m=n/2 (ou m=n/2 1/2, se n for mpar).
No cdigo 2-de-5, onde palavras de 5 bits apresentam sempre 2 bits em 1, tem-se ento
exatamente 5!/2!(5-2)! = 5!/2!3! = 5.4/1.2 = 10 combinaes vlidas. Este cdigo j foi
analisado na seo 7.3 (cdigos de cinco bits ponderados, com pesos 74210). Outra
codificao possvel a 2-de-7, o cdigo biquinrio. Este cdigo j foi analisado na seo
8.5 (cdigos de sete bits ponderados, com pesos 5043210).
8. 9 Cdigos de paridade
Nestes cdigos adicionado um bit palavra codificada, de tal forma que o nmero de uns
seja par (paridade par) ou mpar (paridade mpar). A tabela a seguir ilustra o uso de bits de
paridade par e mpar para um cdigo de trs bits.
Cdigo Paridade par Soma dos 1 Paridade mpar Soma dos 1
000 0 0 1 1
001 1 2 0 1
010 1 2 0 1
011 0 2 1 3
100 1 2 0 1
101 0 2 1 3
110 0 2 1 3
111 1 4 0 3
Tabela 8.9 - Cdigos de paridade
Se o cdigo utilizado for de paridade par, todas as palavras com um nmero mpar de uns
podem ser rejeitadas e sinalizadas como errneas. Se o cdigo for de paridade mpar,
qualquer palavra com um nmero par de uns estar errada.
Assim, pode-se detectar qualquer erro simples (inverso de um bit). Mas no existe neste
cdigo a capacidade de detectar dois ou mais erros (como por exemplo um erro que
transforme o cdigo 011001 em 101001 o nmero de uns permanece mpar, mas a palavra
foi alterada). Tambm no existe a capacidade de corrigir o bit errneo.
8. 10 Cdigos de Hamming
Os cdigos de Hamming, desenvolvidos por R.W. Hamming, introduzem vrios bits de
paridade, que possibilitam no s a deteco de erros mas tambm a sua correo. Um
conceito importante para tal a distncia de Hamming, ou seja, o nmero de bits que so
alterados entre dois cdigos adjacentes.
8-10
Por exemplo, se estes dois cdigos so 0001 e 0100, sua distncia de 2; entre os cdigos
0000 e 1111 a distncia de 4. Se a distncia de Hamming for de 1, como por exemplo em
000, 100, 101, 001, 011, 111, 110 e 010, no possvel nem a deteco nem a correo de
erros; cada erro transforma um cdigo vlido em outro tambm vlido. Se a distncia for de
2, como por exemplo em 000, 011, 110 e 101, ento possvel detectar-se um erro, mas que
no pode ser corrigido (por exemplo, 001 poderia ter sido originado tanto de 000 como de
101 ou 011). Se a distncia for de 3, como por exemplo em 011 e 100, ento um erro
simples pode ser detectado e corrigido (por exemplo, 000 s poderia ter sido originado de
100), e um erro duplo pode ser detectado.
O cdigo de Hamming corrige um erro alterando a palavra errada para o cdigo vlido mais
prximo (de menor distncia), desde que esta menor distncia seja inequvoca, isto , no
existam duas ou mais palavras corretas igual distncia da palavra errada.
Para possibilitar a correo de um erro simples, o cdigo de Hamming mostrado na tabela a
seguir utiliza trs bits adicionais de paridade (A, B e C) para os quatro bits de cdigo
(ponderados por 8, 4, 2 e 1).
Posio 1 2 3 4 5 6 7
Cdigo A B 8 C 4 2 1
0 0 0 0 0 0 0 0
1 1 1 0 1 0 0 1
2 0 1 0 1 0 1 0
3 1 0 0 0 0 1 1
4 1 0 0 1 1 0 0
5 0 1 0 0 1 0 1
6 1 1 0 0 1 1 0
7 0 0 0 1 1 1 1
8 1 1 1 0 0 0 0
9 0 0 1 1 0 0 1
10 1 0 1 1 0 1 0
11 0 1 1 0 0 1 1
12 0 1 1 1 1 0 0
13 1 0 1 0 1 0 1
14 0 0 1 0 1 1 0
15 1 1 1 1 1 1 1
Tabela 8.10 - Cdigo de Hamming
Neste caso, o bit A usado para calcular a paridade par das posies 1, 3, 5 e 7. O bit B
usado para obter-se paridade par nas posies 2, 3, 6 e 7 enquanto que C realiza a
paridade par para as posies 4, 5, 6 e 7.
Existindo um erro, a posio do bit em erro calculada por cba, onde c, b e a sero
zeros se a paridade calculada por C, B e A for par ou uns se a paridade for mpar. Por
exemplo, se o nmero seis (1100110) for recebido erroneamente como 1100010, tem-se:
verificao das posies 4, 5, 6 e 7: paridade mpar: c = 1
verificao das posies 2, 3, 6 e 7: paridade par: b = 0
verificao das posies 1, 3, 5 e 7: paridade mpar: a = 1
Assim, cba = 101, ou seja, a posio 5 est errada e seu bit deve ser invertido para ser
corrigido. Se o nmero tivesse sido recebido correto, a combinao dos bits de paridade
seria zero (000).
Esta codificao pode ser estendida para qualquer nmero n de bits de informao, desde
que k bits de paridade sejam adicionados de acordo com a frmula 2
k
n + k + 1. A tabela
a seguir ilustra alguns casos.
8-11
Bits de informao Bits de paridade
4 3
5 4
11 4
12 5
26 5
27 6
57 6
Tabela 8.11 - Bits de paridade no cdigo de Hamming
8. 11 Cdigos alfabticos (ou cdigos alfanumricos)
Os computadores devem manipular no somente informao numrica, mas tambm
informao alfabtica, constituda de caracteres, sinais de pontuao e dgitos numricos. Os
cdigos que permitem este tipo de representao so denominados de cdigos alfanumricos.
Os primeiros cdigos desenvolvidos utilizavam 6 bits, o que possibilitava a representao de
todos as letras maisculas (26), os dgitos decimais (10) e mais uma srie de caracteres
especiais (ponto, vrgula, dois pontos, etc). Um destes cdigos o Hollerith, utilizado pela
IBM em cartes perfurados. Note-se que no havia a previso para letras minsculas.
Rapidamente os cdigos foram estendidos para sete bits (incluso das letras minsculas) e
posteriormente para oito bits. Os dois cdigos mais amplamente utilizados so o ASCII
(American Standard Code for Information Interchange) e o EBCDIC (Extended Binary
Coded Decimal Interchange Code). As letras so codificadas de tal forma a facilitarem a
ordenao alfabtica de informao textual atravs da simples ordenao binria crescente.
O cdigo ASCII de sete bits (com 128 combinaes possveis) mostrado na Tabela 8.12.
Os cdigos de 0 a 31 so reservados para caracteres de controle, como por exemplo
tabulao (ht), retorno de carro (cr), ejeo de pgina (ff), aviso sonoro (bel), retrocesso
(bsp), avano de linha (lf), tabulao vertical (vt), escape (esc) e outros. Os caracteres
visveis vo do cdigo 32 (espao em branco) at o 126 (caracter til). Note-se que dgitos e
letras esto em ordem numrica crescente (mas no contnua entre si), que no existe
codificao de nenhum caracter acentuado, e que letras maisculas e minsculas possuem
uma diferena numrica de 32.
Bits Bits superiores (mais significativos)
inferiores 000 001 010 011 100 101 110 111
0000 null dle 0 @ P ` p
0001 soh dc1 ! 1 A Q a q
0010 stx dc2 " 2 B R b r
0011 etx dc3 # 3 C S c s
0100 eot dc4 $ 4 D T d t
0101 enq nak % 5 E U e u
0110 ack syn & 6 F V f v
0111 bell etb ' 7 G W g w
1000 bsp can ( 8 H X h x
1001 ht em ) 9 I Y i y
1010 lf sub * : J Z j z
1011 vt esc + ; K [ k {
1100 ff fs , < L \ l |
1101 cr gs = M ] m }
1110 so rs . > N ^ n ~
1111 si us / ? O _ o del
Tabela 8.12 - Cdigo ASCII de 7 bits
8-12
O cdigo ASCII foi posteriormente estendido para oito bits, com a incorporao de mais 128
combinaes tabela acima. Com isto pode-se representar caracteres acentuados (, , , ,
, , , , etc) e diversos smbolos especficos de diversas lnguas. No existe, entretanto,
uma definio nica para esta tabela ASCII de 8 bits; cada fabricante desenvolveu a sua
prpria.
Atualmente oito bits j se tornaram insuficientes para representar todos os smbolos
utilizados. No h espao disponvel, por exemplo, para codificao do alfabeto grego, rabe
ou cirlico (para no mencionar os alfabetos hindus, japoneses e chineses). Para solucionar o
problema, estuda-se atualmente um cdigo de 16 bits, que possibilitaria representar 65536
smbolos distintos (Unicode).