UNIVERSIDADE ESTADUAL DE CAMPINAS FACULDADE DE ENGENHARIA ELÉTRICA E DE COMPUTAÇÃO EA – 772 CIRCUITOS LÓGICOS 1S-2016 – TURMA B Aula 03 Conversão entre bases numéricas PROF. JOSÉ W M BASSANI EA-772 Circuitos Lógicos – Aula 03 Primeiro Semestre de 2016, Professor: Bassani, JWM MARÇO DE 2016 Aula 03. Iniciamos também, nesta aula, o estudo da mudança ou conversão entre bases numéricas. A conversão foi tratada de modo geral e ao final algumas regras práticas foram explicitadas. Descrevemos a conversão por meio de algoritmos simplificados. Algoritmos foram definidos como conjuntos de passos necessários para se realizar alguma tarefa bem definida. O algoritmo para converter um número escrito em uma base b1 para qualquer outra b2 foi, simplificadamente, o seguinte: 1. Expresse o número na notação polinomial na base b1; 2. Avalie o polinômio, usando aritmética na base b2; (Avaliar significa obter o número após atribuição dos valores numéricos dos coeficientes do polinômio e das respectivas potências da base) Fizemos primeiro a conversão para a base 10. Dado um número em qualquer base estudamos a sua conversão para a base 10. Queremos converter um número da base 8 (b1) para a base 10 (b2). Foi então seguido o seguinte algoritmo. 1. (26)8 = 2x81 + 6x80. ( (N)b1 expresso na notação polinomial); 2. 2x8 = 16 e 6x1 = 6. Assim, 16 + 6 = 22 e essa aritmética está sendo feita na base b2, ou seja, na base 10, resultando portanto (22)10. Para adiantar o seu raciocínio em outras bases foram dadas dicas de alguns números em outras bases. (2)10 = (10)2 (3)10 = (10)3 (4)10 = (10)4 O que vem a ser então a base numérica? Corresponde ao número de dígitos (ou símbolos) usados para representar os números. Por exemplo, na base 10 há 10 dígitos que são os inteiros de 0 a 9. Por isso que na definição de número explicitamos que b era a base definida como um número inteiro maior que 1 e que os coeficientes do polinômio (os dígitos do número) estariam contidos entre 0 e b-1. Na base 3 temos 3 dígitos 0, 1 e 2 . Na base 4, teríamos 0, 1, 2 e 3. Logo, 4 na base 4 será o maior dígito mais 1, ou seja, um número com dois dígitos (10)4. Isto é a mesma coisa em qualquer base. O número 10 na base 10 é 1 acima de 9 e precisa de dois dígitos, portanto (10)10. Veja como ficariam as potências de 2 dos números nas diversas bases: 22 = (100)2 2 EA-772 Circuitos Lógicos – Aula 03 Primeiro Semestre de 2016, Professor: Bassani, JWM 32 = (100)3 42 = (100)4 Qualquer potência da base corresponderá a um número com apenas um digito 1 na posição relativa ao valor da base. Assim, 28 = (100000000)2, 515 = (1000000000000000)5. É isso. Como seria 2n – 1 na base 2? Veja se seria um número assim: (1111...11)2 com o número de 1´s igual a n. Foi apresentada a tabela de números em diferentes bases para que você consiga efetuar aritmética em outras bases. 2 4 5 8 10 12 16 Binária Quaternária Quinária Octal Decimal Duodecimal Hexadecimal 0000 00 00 00 00 00 0 0001 01 01 01 01 01 1 0010 02 02 02 02 02 2 0011 03 03 03 03 03 3 0100 10 04 04 04 04 4 0101 11 10 05 05 05 5 0110 12 11 06 06 06 6 0111 13 12 07 07 07 7 1000 20 13 10 08 08 8 1001 21 14 11 09 09 9 1010 22 20 12 10 0A A 1011 23 21 13 11 0B B 1100 30 22 14 12 10 C 1101 31 23 15 13 11 D 1110 32 24 16 14 12 E 1111 33 30 17 15 13 F 3 EA-772 Circuitos Lógicos – Aula 03 Primeiro Semestre de 2016, Professor: Bassani, JWM Vamos agora para o exemplo: Converter (26)8 para a base 5. 1. (26)8 = 2x81+6x80. ( (N)b1 expresso na notação polinomial); 2. Avaliar com aritmética na base 5. Assim, ficamos com (2)5x(13)5 + (11)5x(1)5 Deste modo: (2)5x(13)5+(11)5x(1)5 o que resultaria (31)5 + (11)5 = (42)5. Para se exercitar converta cada um para a base 10 e veja se (26)8 = (42)5. Nem sempre efetuar a aritmética nas outras bases diferentes da base 10 é conveniente ou você irá se lembrar de como fazer. Vamos então explorar um algoritmo para converter qualquer número da base 10 para qualquer base, operando sempre na base 10. Serão as conversões de (N)10 =(N)b. Algoritmo para converter a parte inteira, ou seja, cálculo de c1 c2 ... c n −1 c n . 1. Divida o número decimal pelo valor da base b, ou seja, (N)10 /b; 2. Faça c n = resto de ( N )10 ; b ( N )10 ) b = ; b ( 3. Faça c n −1 4. Continue calculando os coeficientes até que o quociente seja nulo. Exemplo de conversão de (23)10 para a base 2. Dividendo (23)10 Divisor 2 considerado como um decimal Dividendo Divisor Quociente Resto índice (i) do coeficiente (ci) 23 2 11 1 5 (- significativo) 11 2 5 1 4 5 2 2 1 3 2 2 1 0 2 1 2 0 1 1 (+ significativo) Como resultado final (veja também a seta) teríamos então: (23)10 = (10111)2 Em bases maiores que 10 costuma-se representar os dígitos maiores ou iguais a 10 com letras. Assim, na base 16 ou hexadecimal, 10 = A, 11 = B, 12 = C, 13 = D, 14 = E e 15 = E. Se você divide algum número decimal por b o resto necessariamente será menor que b e assim sempre poderá se representar algum dígito na base b. O algoritmo para converter a parte fracionária (. c4 c5 ) de um número na base 10 para qualquer outra base está apresentado a seguir. Vamos assumir que o número esteja representado por duas partes NI. Nf, respectivamente as partes inteira e fracionária. 4 EA-772 Circuitos Lógicos – Aula 03 Primeiro Semestre de 2016, Professor: Bassani, JWM 1. Multiplico a parte fracionária pela base. Assim, efetuo (.Nf)10 x b. Se o produto resultante for < 1 então 2. O digito mais significativo da fração será zero; Voltar ao item 1 Se o produto resultante for ≥ 1 3. O digíto mais significativo será a parte inteira do resultado; 4. Voltar ao item 1. O algoritmo não especifica a parada, mas isso você vai ver ao trabalhar com os exemplos dados em aula e nos exercícios. Exemplos Converter: (0.625)10 = ( )8 0.625 x 8 = 5.000 0.5 Veja que se você fosse adiante não acrescentaria dígitos significativos. Converter: (0.23)10 = (0.001110)2 Produtos Resultado da conversão 0.23 x 2 =0.46 0.0 0.46 x 2 = 0.92 0.00 0.92 x 2 = 1.84 0.001 0.84 x 2 = 1.68 0.0011 0.68 x 2 = 1.36 0.00111 0.36 x 2 = 0.72 0.001110 Com os dois algoritmos podemos então converter um número qualquer da base 10 para qualquer base. Exemplo Converter: (27.68)10 = ( )2 27/2 = 13 resto 1 13/2 = 6 resto 1 6/2 = 3 resto 0 3/2 = 1 resto 1 1/2 = 0 resto 1 5 EA-772 Circuitos Lógicos – Aula 03 Primeiro Semestre de 2016, Professor: Bassani, JWM Seguindo adiante, Produtos 0.68 x 2 = 1.36 0.36 x 2 = 0.72 0.72 x 2 = 1.44 0.44 x 2 = 0.88 Resultado da conversão 0.1 0.10 0.101 0.1010 O resultado final fica, então, (27.68)10 = (11011.1010)2 Distração: Conversão da base 2 para bases que são potências de 2 No caso de bases que são potências de 2 as coisas podem ficar mais simples. Nestes casos, basta agrupar os números binários em grupos de 2n dígitos. Isto facilita converter da base 2 para outras bases. Base 2 base 8 (23) Como ilustrado abaixo, marque os grupos de n dígitos antes do ponto binário da direita para a esquerda e depois do ponto da esquerda para a direita. Agora converta (de cabeça) cada grupo de n=3 dígitos para a base 8 (é claro que você tem apenas que ler e copiar os dígitos correspondentes). Lembre-se de ajustar o número de bits para múltiplos de 3 bits. (1101.10101)2 = 1 1 0 1 . 1 0 1 01 1 5 . 5 base 2 = 001 101.101 010 2 base 8 Avalie, se quiser, cada bloco de 3 dígitos usando o polinômio escrito na base 2 e avaliado na base 10. Base 2 -- base 16 (24) n = 4. (11011.1010)2 = ( )H = 11011.1010 base 2 1 base hexadecimal (16) B A Se o número for potencia k de 2 ajuste os bits para blocos de tamanho k e aplique a regra. No caso de truncamento, o número ficaria impreciso. Deve-se lembrar que para se obter a devida precisão para um número 2k seria necessário considerar pelo menos k bits depois do ponto da base. TRIANGULAÇÃO Como último recurso, se você não tiver alternativa, fique com a regra da triangulação. Converta da base original para a base 10 (você sabe fazer as contas) e daí da base 10 para a base desejada, usando os algoritmos e operações na base 10. 6 EA-772 Circuitos Lógicos – Aula 03 Primeiro Semestre de 2016, Professor: Bassani, JWM Exemplo Converter: (16)7 para a ( )3 Converta (16)7 para a base 10. Assim: 1 x 71 + 6 x 70 = (13)10 Agora, converta (13)10 para a base 3. Assim: 13/3 = 4 (resto 1), 4/3 = 1 (resto 1), 1/3 = 0 (resto 1). Ou seja, (13)10 = (111)3 Bibliografia -Bassani JWM. Notas de aula – Circuitos Lógicos. -Veja a lista de referencias indicadas na primeira aula (Veja no site indicado para a disciplina o material didático e bibliografia) 7