Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Codificação de bytes Códigos BCD Motivação O uso de valores binários é conveniente para cálculos, mas implica em rotinas de conversão para decimal. Uma alternativa utilizada em máquinas antigas, para facilitar a conversão, é se armazenar em binário os dígitos do numero, e não seu valor. Cada digito irá necessitar de 4 bits para ser armazenado. Codificação 4 bits : 16 combinações possíveis. Existem apenas 10 algarismos, portanto pode haver várias formas de codifica-los. Esta codificação é denominada Binary Coded Decimal (Decimal codificado em binário – BCD). Diferença entre os códigos: peso (valor absoluto) dado aos diversos bits. Codificação Código NBCD : pesos 8 4 2 1 Código de Aiken: pesos 2 4 2 1 Código de Stibitz: pesos 8 4 2 1 - 3 Exemplo (codificação do digito 7) 0111 em NBCD 1101 em Aiken 1010 em Sitbitz Tabela de valores Dígito NBCD 8421 Aiken 2421 Stibitz 8421 + 3 0 0000 0000 0011 1 0001 0001 0100 2 0010 0010 0101 3 0011 0011 0100 4 0100 0100 0111 5 0101 1011 1000 6 0110 1100 1001 7 0111 1101 1010 8 1000 1110 1011 9 1001 1111 1100 Exemplo de uso Numero 4563 em decimal: Em binário: 0001000111010011 (0x11D3) Em NBCD: 0100010101100011 (0x4563) Em Aiken: 0100101111000011 (0x4BC3) Em Stibitz: 0111100010010100 (0x7894) Código mais utilizado Dos 3 códigos vistos, o NBCD foi o mais utilizado, também pelo fato de que seu valor em hexadecimal tem os mesmos digitos que o valor em decimal. O código NBCD é denominado também simplesmente de BCD. Aritmética BCD Para se somar dois números codificados em BCD: Soma-se digito a digito, em binário. Três opções podem ocorrer: Resultado é um digito válido e não existe carry. Manter o resultado obtido. Resultado não é digito válido, não houve carry (valor entre 10 e 15). Subtrair 10 (ou somar 6) ao resultado, gerar um carry para próximo digito. Resultado não é digito válido, houve carry (valor entre 16 e 18). Manter o carry e subtrair 10 (ou somar 6) ao resultado para obter digito correto. Exemplo de cálculo 832 + 983 = 100000110010 + 100110000011 1000 0011 0010 1001 1000 0011 10001 1011 0101 Digito válido, sem carry – mantido Digito inválido, sem carry – somar 6 (carry para próx. digito) 0110 0001 Digito válido, com carry – somar 6, carry para próximo digito 0110 1000 0001 10010 Resultado: 0001 1000 0001 0101 (0x1815), 1815 em decimal. Exercício de fixação Converter os valores 574 e 386 para BCD e efetuar sua soma (em BCD) 0101 0111 0100 0011 1000 0110 1000 1111 1010 0001 0001 0110 1001 10000 0000 0110 0110 100101100000 = 0x960, 960 decimal 11 Códigos cíclicos (Gray) Conceituação Não são usados para cálculo, mas para indicar variação de grandezas analógicas (para sensores de temperatura, pressão, peso, etc). Nesse tipo de codificação, quando se muda de um digito para outro, somente um único bit varia. Tabela de exemplo Com 4 digitos, todos os digitos usados Valor 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 Conversão de binário para Gray Acrescenta-se um zero à esquerda do numero a converter. Soma-se (desprezando o carry) os pares de digitos do numero, da esquerda para a direita. Os resultados obtidos são os digitos do código Gray. Exemplo: 10110 = 010110 = 0+1 1+0 0+1 1+1 1+0 = 11101 Exercício de fixação Converter os números 10101, 10110 e 10111 para Gray. 0+1 1+0 0+1 1+0 0+1 = 11111 0+1 1+0 0+1 1+1 1+0 = 11101 0+1 1+0 0+1 1+1 1+1 = 11100 Conversão de Gray para binário Acrescentar um zero à esquerda do valor em Gray Da esquerda para a direita: Separa-se os bits em grupos, delimitados pelo bit 1 (ou pelo fim do valor). O primeiro grupo (à esquerda) mantem os bits como estão. O próximo grupo terá seus bits invertidos. O grupo seguinte volta a ter seus bits não alterados. Em seguida, o seguinte terá seus bits alterados. E repete-se novamente até não haver mais grupos. Exemplo Valor em Gray: 01001011 = 001001011 Separando os grupos, tem-se: 001 001 01 1 001 manter = 001 001 inverter = 110 01 manter = 01 1 inverter = 0 Resultado: 001110010 Outro exemplo Valor em Gray: 11100 = 011100 Separando os grupos, tem-se: 01 1 1 00 01 manter = 01 1 inverter = 0 1 manter = 1 00 inverter = 11 Resultado: 010111 Codificação de caracteres Conceituação Computadores devem também manipular informação alfabética (caracteres), além da informação numérica. Letras serão codificadas de forma sequencial e crescente, para facilitar a tarefa de ordenação alfabética. Letras minúsculas e minúsculas possuem códigos diferentes. Além das letras, são previstos valores para códigos de controle, sinais de pontuação, e dígitos numéricos, e outros símbolos. Primeiro código: EBCDIC, usado pela IBM. Códigos ASCII Padrão proposto e aceito internacionalmente (ASCII – American Standard Code for Information Interchange – Código Americano para Troca de Informação) Previsto inicialmente para 7 bits, com numeros e letras maiúsculas e minúsculas. Continha 127 posições, sendo os valores de 0 a 31 reservados para caracteres de controle (para terminais e impressoras). Aumentado depois para 8 bits. Acima de 127 se encontram os caracteres acentuados maiúsculos e minúsculos, e alguns símbolos semigráficos. Só há verdadeira padronização nos primeiros 127 caracteres. Existe variação nos caracteres acima deste valor. Tabela de códigos ASCII 127 primeiros códigos: Tabela de códigos ASCII 127 primeiros códigos: 24 Códigos UNICODE Tabela ASCII se mostrou insuficiente para representar os símbolos de linguagens orientais (grego, árabe, hindu, judaico, etc). Prroposto o uso de codificação de 16 bits (2 bytes) por caracter. Essa tabela recebeu o nome de Unicode. Pela tabela Unicode, são 65536 símbolos diferentes possíveis. As primeiras 256 posições (com o byte superior em 00000000) correspondem à tabela ASCII. Sistemas operacionais atuais (como por exemplo Windows a partir do XP) já trabalham considerando a tabela Unicode. Alguns alfabetos disponíveis em Unicode: árabe, armênio, cirílico, hindu, grego, hebraico, tailandês, birmanês, e outros.
Compartilhar