Aritmetica Binaria: mudanças entre as edições

De Wiki Cursos IFPR Foz
Ir para navegaçãoIr para pesquisar
Linha 180: Linha 180:


;Negação
;Negação
A negação é a operação de conversão de um número positivo em seu equivalente negativo e vice-versa.
A '''negação''' é a operação de conversão de um número positivo em seu equivalente negativo, ou de um número negativo em seu equivalente positivo.
 
Para realizar a '''negação''' de um número basta calcular seu '''complemento de 2'''.


;Exemplo de binário com sinal de oito bits:
;Exemplo de binário com sinal de oito bits:
Linha 197: Linha 199:
   '''1'''1010110<sub>2</sub> = - 42<sub>10</sub> (bit de sinal + complemento de 2)
   '''1'''1010110<sub>2</sub> = - 42<sub>10</sub> (bit de sinal + complemento de 2)


A '''negação''' de um número negativo (complemento 2), será o seu simétrico positivo:
Negação: a negação de um número negativo será o seu simétrico positivo:


Exemplo: 
   '''1'''1010110<sub>2</sub> = - 42<sub>10</sub> (negativo)
   '''1'''1010110<sub>2</sub> = - 42<sub>10</sub> (negativo)
  Passo 1: calcula-se o complemento 1 do número
  Passo 1: calcula-se o complemento 1 do número

Edição das 19h07min de 19 de março de 2014

Aritmética Binária

Adição em binário

  • 0 + 0 = 0
  • 0 + 1 = 1
  • 1 + 0 = 1
  • 1 + 1 = 10 = 0 e vai 1 para próxima posição (Carry = 1)
  • 1 + 1 + 1 = 11 = 1 e vai 1 para próxima posição (Carry = 1)

Exemplo:

  1   1    <- vai 1
   101010
 + 110011
 --------
  1011101

Subtração em binário

  • 0 - 0 = 0
  • 1 - 0 = 1
  • 1 - 1 = 0
  • 0 - 1 = 1 precisa emprestar 1 (10 - 1 = 1)

Exemplo:

    1      <- empresta 1
   110011
 - 101010
 --------
   001001

Exercícios:

  1. Efetue a soma dos seguintes pares de números binários:
    • 10110 + 00111
    • 011101 + 010010
    • 10001111 + 00000001
  2. Efetue a subtração dos seguintes pares de números binários:
    • 101101 - 010010
    • 10001011 - 00110101
    • 101011101 - 011100110
  3. Converta os pares números decimais em binário e efetue as operações:
    • 85 + 73
    • 233 + 120
    • 233 - 120
    • 255 - 127
    • 128 - 15

Multiplicação em binário

  • 0 * 0 = 0
  • 0 * 1 = 0
  • 1 * 0 = 0
  • 1 * 1 = 1

Exemplo (segue a lógica da multiplicação em decimal):

     1010 (multiplicando)
   x  101 (multiplicador)
   ------
     1010
    0000  (produtos parciais)
 + 1010
 --------
   110010 (produto)

A maioria dos computadores digitais pode somar apenas dois números binários por vez. Por isto, os produtos parciais não podem ser somados ao mesmo tempo. Em vez disto, são somados dois de cada vez.

Número de dígitos do produto = Número de dígitos do multiplicando + Número de dígitos do multiplicador.

  • Exemplo: 8 bits x 8 bits = 16 bits

Exercícios:

  1. Efetue a multiplicação dos seguintes pares de números binários:
    • 1001 * 1011
    • 10110 * 00111
    • 011101 * 010010
    • 11011101 * 10110110
  2. Converta os pares números decimais em binário e efetue as operações:
    • 12 * 10
    • 170 * 31
    • 170 * 128

Divisão em binário

Segue a lógica da divisão em decimal. É uma operação mais trabalhosa e de uso pouco frequente. Não vamos estudá-la agora.

Números positivos e negativos

Números sem sinal:

A representação de números sem sinal em um computador aproveita todos os bits do número para representar quantidades: de 0 até 2n - 1 (2n valores diferentes). Por exemplo, um número de 8 bits pode armazenar números binários de 00000000 até 11111111 (de 0 a 255 em decimal). Isto representa a magnitude do número.

Exemplo:

N = 8 bits
Números sem sinal: 0 ≤ X ≤ 255

Números positivos e negativos:

A representação dos números positivos e negativos em um computador também permite representar quantidades em função do número de bits do número, entretanto, precisam reservar um bit para a representação do sinal (+ ou -). Isto é feito em geral acrescentando ao número um outro bit, chamado bit de sinal.

Existem várias formas de representar um número negativo, as mais usadas são:

  • Sinal e magnitude;
  • Complemento de 1;
  • Complemento de 2.

Sinal e magnitude

O bit mais a esquerda (MSB) representa o sinal: 0 indica número positivo e 1 indica número negativo. Os (N - 1) bits restantes representam a magnitude do número.

Quantidade simétrica: -(2N-1 - 1) ≤ X ≤ 2N-1 - 1

Exemplo:

N = 8 bits
Números com sinal: -127 ≤ X ≤ 127
001010102 = + 4210
101010102 = - 4210 (sinal e magnitude)

Embora a representação sinal/magnitude seja direta, os computadores e calculadoras não a utilizam porque a implementação dos circuitos é mais complexa que outras formas de representação.

A representação mais utilizada é o complemento de 2.

Complemento de 1

A representação de um número em complemento de 1 é o simétrico dele, com todos os bits complementados, incluindo o bit de sinal.

Complemento de 1: Troque 0 por 1 e vice-versa.

Exemplo:

N = 8 bits
001010102 = + 4210
110101012 = - 4210 (complemento de 1)

Complemento de 2

O complemento de 2 é determinado em dois passos:

  1. Calcula-se o complemento de 1 do número;
  2. Soma-se 1 ao complemento de 1.
    • Despreza-se o transporte no bit mais significativo (chamado de carry externo), caso exista.

Quantidade assimétrica: -2N-1 ≤ X ≤ 2N-1 - 1

O bit mais a esquerda (MSB) representa o sinal: 0 indica número positivo e 1 indica número negativo.

Exemplos
Veja a forma de representar números decimais com sinal como números binário com sinal no sistema de complemento de 2, usando um total de 5 bits (incluindo o bit de sinal).
  • Número decimal +13
é positivo, portanto é representado de forma direta:
1310 = 11012
anexando o sinal o temos:
+13 = 01101
      |
      Bit de sinal
  • Número decimal -9
é negativo, portanto sua magnitude deve ser representada na forma de complemento de 2:
 910 = 10012 (magnitude)
calculando o complemento de 2:
 0110 (complemento de 1)
+   1
------
 0111 (complemento de 2)
número com sinal:
-9 = 10111
     |
     Bit de sinal
Extensão do sinal

Nos exemplos anteriores foi necessário usar um total de cinco bits para representar os números com sinal, um bit a mais que o necessário para representar a magnitude do número. Normalmente os computadores usam registros para armazenar os números binários que são múltiplos de quatro bits, como 4, 8, 12, 16, 32 ou 64. Por exemplo, em um sistema que representa números de 8 bits, o bit mais significativo (MSB) é o sinal e os outros sete são a magnitude.

Veja o caso dos números dos exemplos anteriores:

+13 = 00001101
      |
      Bit de sinal
como é positivo, basta acrescentar zeros a esquerda.
-9 = 11110111
     |  |
     |  Bit de sinal no formato de cinco bits
     Extensão do bit de sinal no formato de oito bits.
como é negativo, acrescentamos uns a esquerda.
Negação

A negação é a operação de conversão de um número positivo em seu equivalente negativo, ou de um número negativo em seu equivalente positivo.

Para realizar a negação de um número basta calcular seu complemento de 2.

Exemplo de binário com sinal de oito bits

Positivo:

+ 4210 = 001010102 (bit de sinal + binário verdadeiro)

Negativo:

Passo 1: calcula-se o complemento 1 do número
 00101010 (positivo)
 11010101 (complemento 1)
Passo 2: soma-se 1 ao complemento 1
 11010101
+       1
---------
 110101102 = - 4210 (bit de sinal + complemento de 2)

Negação: a negação de um número negativo será o seu simétrico positivo:

 110101102 = - 4210 (negativo)
Passo 1: calcula-se o complemento 1 do número
 00101001 (complemento 1)
Passo 2: soma-se 1 ao complemento 1
 00101001
+       1
---------
 001010102 = 4210 (simétrico positivo)

Aritmética com complemento de 2

A subtração pode ser implementada como soma do complemento de 2. Isto permite que a adição e a subtração sejam efetuadas pelo mesmo circuito digital.

Exemplo:

 Operação: + 410 - 310 (representados em binários de 4 bits)
   410 = 01002
   310 = 00112
  -310 = 1100 + 1 = 11012 (complemento de 1 + 1 = complemento de 2)
 Realizando a soma do positivo com o negativo:
    0100
   +1101
   -----
   10001 
   |
   Bit de carry externo desprezado

Sobre a multiplicação no sistema de complemento de 2:

  • Se os dois números forem positivos, poderão ser multiplicados diretamente e o resultado será positivo (bit de sinal 0);
  • Se os dois números forem negativos, representados em complemento de 2, deve-se obter o complemento de 2 dos números para convertê-los em positivos e em seguida multiplicá-los. O produto será positivo (bit de sinal 0);
  • Se um número for positivo e o outro negativo, o negativo deverá ser convertido em positivo, através do complemento de 2, para então multiplicar os números. Como o resultado deve ser negativo, o produto deverá ser convertido em negativo, através do complemento de 2 (bit de sinal 1).

Exercícios:

  1. Efetue a subtração dos seguintes pares de números binários, usando complemento de 2:
    • 0101101 - (0010010) -> números de 7 bits: sinal + magnitude
    • 010001011 - (000110101) -> números de 9 bits: sinal + magnitude
    • 0101011101 - (0011100110) -> números de 10 bits: sinal + magnitude

Carry e Overflow

Carry interno:

Em uma soma (ou subtração em complemento de 2) de números binários sem sinal, toda vez que "vai 1" em uma coluna para a coluna da esquerda, temos um carry interno.

Exemplo:

      1    <- vai 1 (carry interno)
   101010
 + 010011
 --------
   111101

Carry externo:

Caso o "vai 1" ocorra no bit mais significativo (MSB) temos um carry externo. Neste caso, este bit de carry poderá ser utilizado para indicar que o resultado da soma não cabe nesta quantidade de bits.

Exemplo:

  1   1    <- vai 1 (O "vai 1" do bit MSB é um carry externo, o outro um carry interno)
   101010  (6 bits)
 + 110011  (6 bits)
 --------
  1011101  (7 bits!)

Overflow aritmético:

O overflow ocorre quando o resultado de uma operação supera a capacidade do registro usado para guardar este resultado.

Para somas ou subtração de números com sinal (+ ou -), o overflow ocorre caso o sinal do resultado não seja aquele que seria o esperado (por exemplo, um resultado negativo da soma de dois números positivos):

Exemplo: Soma dos números binários  +9 com +8, ambos com 4 bits de magnitude e 1 bit de sinal:
 +9  ->  0 1001
 +8  ->  0 1000
        --------
         1 0001  <- Magnitude incorreta
         |
         Sinal incorreto

Flags de carry e overflow:

As CPU (Unidades Centrais de Processamento) normalmente dispõe de um registrador de estado (status register) com alguns bits para indicar se em uma operação ocorreu um carry externo ou overflow.

_ _ C _ O _ _ _

Portanto, é importante checar:

  • Flag carry (C) após soma ou subtração de números sem sinal;
  • Flag overflow (O) após soma ou subtração de números com sinal.

Referências

TOCCI, R.J.; WIDMER, N.S.; MOSS, G.L. Sistemas Digitais: princípios e aplicações, São Paulo: Pearson, 2011.