Conteúdo Ciência da Computação Soma de números binários. Soma de números BCD. Subtração binária. Representação de números sinalizados. Complemento de 1. Complemento de 2. Overflow. Multiplicação binária. Divisão binária. Circuitos Digitais Aritmética Binária Prof. Sergio Ribeiro Material adaptado das aulas de Sistemas Digitais do Prof. Dr. Marcelo Andrade da USP Circuitos Digitais Soma de Números Binários Álgebra Booleana (OR) 0 0 1 1 + + + + 0 1 0 1 = = = = 0 1 1 1 Soma de Números Binários Aritmética (+) 0 0 1 1 1 + + + + + 0 1 0 1 1 = = = = + 0 +0 0 0 “carry ” 1 1 0 e “vai um” = (10) 1 = 1 e “vai um” = (11) Circuitos Digitais 3 Exemplos 1 +0 1 1 +1 10 1 +1 0 “e vai um” 1 1 +1 11 1 1 +1 1 “e vai um” Circuitos Digitais 4 Nº 2 1 1 1 1 1 0 0 1 + 0 +1 1 Exemplos Nº 1 1 2 1 0 1 1 1 0 0 Circuitos Digitais 1 0 0 Conferindo em decimal: 1 1 1 1 1 0 0 1 25 + 11 + 1 1 1 1 36 1 1 5 Circuitos Digitais 0 0 0 Conferindo em decimal: 09 + 15 24 6 1 Exemplos Soma de Dois Números BCD Nº 3 Em decimal: 1 1 1 Em BCD: Conferindo em decimal: 1 1 1,0 1 1 + 1 0,1 1 0 3,375 + 2,750 52 + 43 0 1 0 1 0 0 1 0 + 0 1 0 0 0 0 1 1 1 1 0, 0 0 1 6,125 95 1 0 0 1 0 1 0 1 Circuitos Digitais 7 Circuitos Digitais Soma de Dois Números BCD Soma de Dois Números BCD Ex2: E quando a soma for maior do que 9? Em decimal: Ex: 6 +7 0 1 1 0 + 0 1 1 1 13 1 1 0 1 8 BCD para 6 BCD para 7 BCD inválido! Em BCD: 26 + 57 0 0 1 0 0 1 1 0 + 0 1 0 1 0 1 1 1 83 0 1 1 1 1 1 0 1 + 0 1 1 0 Solução: Somar 6 (0110) ao resultado final para corrigir o código BCD inválido e adicionar o “carry ” que será gerado! Circuitos Digitais adicione 6 1 0 0 0 0 0 1 1 8 9 Subtração Binária 3 Circuitos Digitais 10 Subtração Binária Aritmética (–) 0 1 1 0 Circuitos Digitais –0 –1 –0 –1 = = = = 0 – 0 0 0 “borrow” 0 1 1 e “empresta um” 1 – 0 1 1 – 1 0 0 – 1 1 10 – 1 1 (2) (1) (2-1=1) “empresta um” (2 – 1 = 1) 11 Circuitos Digitais 12 2 Exemplos Exemplos Nº 1 0 Nº 2 10 1 11 10 10 1 1 0 0 1 – – 25 – 11 1 0 1 1 0 1 Conferindo em decimal: Conferindo em decimal: 1 1 0 0 1 14 1 1 0 11 – 25 1 0 1 1 -14 ? Circuitos Digitais 13 Números Negativos Circuitos Digitais 14 Sistema Sinal-Magnitude BIT DE SINAL Bit mais significativo (MSB) = indicador de sinal: Se MSB = 0 Se MSB = 1 + – Portanto, o número binário pode ser representado por: Sistema SinalSINAL / MAGNITUDE Magnitude MSB (n-1) bits restantes Circuitos Digitais Não é muito utilizado! 15 Complemento de um Número Circuitos Digitais Complemento de um Número Complemento de um (em binário): 1) (2n – 1) – número ou 2) substituem-se todos os “0” por “1” e vice-versa. Exemplo 2: complemento de 1 de 11011010 Método 1: (28 – 1) = 255 – 11111111 (255) 11011010 (218) 00100101 ( 37) Exemplo 1: complemento de um de 10110 Pelo método 1) (25 – 1) = 32 – 1 = 31 ⇒ 11111 (31) – 10110 (22) = 01001 (9) Método 2: Comp. de 11011010 = 00100101 Pelo método 2) Comp. de 10110 (22) = 01001 (9) Circuitos Digitais 16 17 Circuitos Digitais 18 3 Complemento de 2 Complemento de 2 Complemento de 2 (em binário): Método 1: 2n – número Exemplo 2: complemento de 2 de 11011010 Método 1: 1) (25) = 32 ⇒ 100000 (32) – 10110 (22) = 01010 (10) 2) Comp. de 2 de 10110 = 01010 Circuitos Digitais – (28) = 256 Método 2: ⇒ substituem-se todos os “0” por “1” e vice-versa (complemento de 1); e ⇒ soma-se “1” ao resultado. 100000000 (256) 11011010 (218) 00100110 ( 38) Método 2: Comp. de 2 de 11011010: complemento de 1 00100101 +1 00100110 19 Circuitos Digitais Representação de Números com Sinal usando Complemento de 2 20 Sistema Complemento de 2 COMPLEMENTO DE 2 Bit mais significativo (MSB) = indicador de sinal: Se MSB = 0 + SINAL / MAGNITUDE Se MSB = 1 – SINAL / COMPLEMENTO DE 2 Sistema de complemento de 2 Circuitos Digitais 21 Muito utilizado! Circuitos Digitais 22 Sistema Complemento de 2 Sistema Complemento de 2 :: Exemplos 1 :: Exemplos 2 +13 ⇒ -9 ⇒ -8 ⇒ Circuitos Digitais 01101 01001 01000 ⇒ ⇒ 10110 + 1 10111 + 1 ⇒ ⇒ 10111 11000 23 01100 ⇒ +12 11010 ⇒ 00101 + 1 ⇒ 00110 ⇒ 10001 ⇒ 01110 + 1 ⇒ 01111 ⇒ Circuitos Digitais +6 ∴ -6 +15 ∴ -15 24 4 Subtração como soma de complementos Negação Subtração = soma com o complemento do subtraendo. A – B = A + (-B) Em binário: como vimos, negamos um número calculando o seu complemento de 2. Em decimal, por exemplo: 8 –6 2 +13 = 01101 complemento de 6 = 4 8 +4 x1 2 Circuitos Digitais -13 = 10010 + 1 = 10011 25 Subtração por Complemento de 2 Ex1: 51 – 18 Circuitos Digitais Subtração por Complemento de 2 Ex2: 0110011 – 0010010 18 – 51 comp. de 2: 1 1 0 1 1 1 0 0110011 + 1101110 10100001 x Desprezado quando estiver à esquerda do bit de sinal. 26 Resultado final (+33) 0010010 – 0110011 comp. de 2: 1 0 0 1 1 0 1 0010010 + 1001101 1011111 comp. de 2: 0 1 0 0 0 0 1 Resultado final (-33) Circuitos Digitais 27 +33 Circuitos Digitais 28 Subtração por Complemento de 2 0´s e 1´s à esquerda Ex3: A quantidade de 0´s colocados à esquerda de um número positivo ou 1´s colocados à esquerda de um número negativo não altera seu valor. +13 = 01101 +13 = 00001101 - 13 = 10010 + 1 = 10011 - 13 = 11110011 5 – 25 Preencha com zeros à esquerda até que os bits de sinal fiquem alinhados 000101 + 100111 101100 Usado para representar qualquer número binário, positivo ou negativo, com o número de bits desejado. Circuitos Digitais 29 000101 – 011001 101 – 11001 comp. de 2: 0 1 0 1 0 0 Resultado final (-20) Circuitos Digitais +20 30 5 Subtração por Complemento de 2 Ex4: Faixa completa de valores que podem ser representados 011001 – 000101 11001 – 101 25 – 5 Representação de Números com Sinal usando Complemento de 2 Preencha com zeros à esquerda até que os bits de sinal fiquem alinhados -2(n-1) 011001 + 111011 1010100 Sendo n o número de bits x Desprezado quando estiver à esquerda do bit de sinal. +(2(n-1) – 1) Resultado final (+20) Circuitos Digitais 31 Circuitos Digitais 32 Quantos números com sinal podem ser representados utilizando 4 bits? Exemplo Quantos números com sinal podem ser representados utilizando 4 bits? – (2n-1) ⇒ + (2n-1 – 1) = 1000 (–8) ⇒ 0111 (+7) Quantos números sem sinal podem ser representados utilizando 4 bits? 2n = 16 ⇒ 0 → 15 Circuitos Digitais 33 Caso Especial de Complemento de 2 1000 ⇒ 0111 + 1 ⇒ 1000 ? Circuitos Digitais 34 Overflow Também conhecido como estouro ou transbordamento. “Sempre que o número com sinal tiver um 1 no bit de sinal e zero em todos os outros bits, seu equivalente decimal será -2n, sendo n o número de bits da magnitude.” 1000 = -23 = -8 10000 = -24 = -16 Circuitos Digitais Overflow ocorre quando o número de bits do resultado de uma operação aritmética é maior do que a capacidade de representação do número. Só pode ocorrer overflow quando dois números positivos ou dois números negativos são somados. 01000 = +8 010000 = +16 35 Circuitos Digitais 36 6 Overflow Overflow A adição de dois números em complemento de 2 segue duas regras: Some os dois números e observe se ocorre o carry (vai 1) sobre o bit de sinal e se ocorre o carry após o bit de sinal. Se ocorrer um e somente um dos dois carry, então houve estouro; caso contrário o resultado da soma está dentro do campo de definição. Circuitos Digitais 37 Overflow + 0101 1010 1111 + 5 -6 -1 + 0110 1011 0001 + 6 -5 1 + 1011 1010 0101 + -5 -6 -11 Exemplos para n = 4 bits: + 0101 0010 0111 +5 2 7 + 0101 0110 1011 +5 6 11 Carry sobre o bit de sinal ⇒ overflow Circuitos Digitais 38 Overflow Ex: 5 + 3 = 8 (utilização de 4 bits) Não houve carry ⇒ não overflow + 0101 0011 1000 ⇒5 ⇒3 ⇒8 ? Carry sobre o bit de sinal e Notar: quando o bit mais significativo for 1, trata-se de um número negativo. No caso desse exemplo seria necessário mais um bit para representar o 8 usando a representação binária em complemento de 2. após ele ⇒ não overflow Carry somente após o bit de sinal ⇒ overflow Circuitos Digitais 39 Complemento de 2: Estouro de Magnitude Circuitos Digitais 40 Multiplicação Binária Em um sistema de complemento de dois, existe sempre um limite para o tamanho dos números a serem representados. 11001 x 11 11001 1 1 0 0 1+ Exemplo: quando usamos complemento de dois com padrões de quatro bits (um para o sinal), ao valor 9 não está associado padrão algum; por isso não conseguimos obter uma resposta certa para a soma 5 + 4, o resultado apareceria como -7. Circuitos Digitais Não houve carry ⇒ não overflow 41 1001011 25 x 3 = 75 Circuitos Digitais 42 7 Multiplicação Binária Divisão Binária Dividimos um número binário por 2 cada vez que seus bits são rotacionados para a direita e o zero é colocado no bit mais significativo. Atenção: usar vírgula quando o bit menos significativo for igual a 1! 10010 = 18 Multiplicamos um número binário por 2 cada vez que seus bits são deslocados para a esquerda e o zero é colocado no bit menos significativo. 1001 =9 10010 100100 = 18 = 9 x 2 01001 = 36 = 9 x 4 = 18 x 2 0 0 1 0 0,1 0 0 0 1 0,0 1 Circuitos Digitais 43 – 25 2 1 12 25 45 Conclusões ÷ 2 = 12,5 – 11001 10 10 1 1 0 0,1 010 –1 0 000 – 00 001 – 00 010 10 00 Circuitos Digitais 46 Exercícios O que concluímos? Que qualquer operação aritmética pode ser realizada em computadores apenas através de somas (diretas ou em complemento)! 1. 100011 ÷ 101 2. 100111 ÷ 110 3. 21 – 13 Legal, mas para que serve isso? Por enquanto, ficamos por aqui. Mais adiante veremos como essas propriedades serão úteis para se projetar circuitos lógicos presentes em um processador. Circuitos Digitais 44 Divisão Binária 11001 10 10 1100 010 –10 000 – 00 001 – 00 01 Circuitos Digitais ÷2 = 4,5 = 18 ÷ 4 = 9 ÷ 2 = 2,25 = 18 ÷ 8 = 4,5 ÷ 2 Circuitos Digitais Divisão Binária A B R Q = 9 = 18 4. 14 – 17 47 Circuitos Digitais 48 8