Escolar Documentos
Profissional Documentos
Cultura Documentos
Ta ali a soma. Os numeros em vermelhos são as “sobras” da soma dos algarismos anteriores.
Exatamente como a soma convencional, porém usando só 0 e 1!
Se no ultimo algorismo também “sobrasse” 1, era só colocar mais um algorismo no final, exemplo:
11111111 + 00000001 = 100000000
Nós, humanos, podemos ir adicionando numerosinhos enquanto houver espaço no papel.
Computadores não tem este luxo: Se o computador que realizar a soma que fiz de de 11111111 + 1
não conseguir trabalhar com mais de 8 bits, o resultado seria 00000000 e um erro de overflow!.
(Overflow é quando o resultado de um calculo é muito grande para a máquina). Se a soma fosse
11111111 + 00000010, o resultado seria 00000001 com erro de overflow. Efetivamente, 255 + 2 = 1
com aviso de erro de overflow.
É importante lembrar que, se estamos trabalhando com números de 8 bits, serão sempre 8 bits a
resposta. Se estivermos trabalahndo com numeros de 16bits, a resposta será sempre 16bits! Se o
resultado ultrapassar o numero de bits, então ocorre um overflow.
O maior numero possivel de representar dado um determinado numero de bits binários é dada pela
seguinte equação:
(2^N)-1. Aonde N é o numero de bits. Para 8 bits, o valor é( 2^8)-1 ou seja: 256-1, ou 255. Valores
entre 0 e 255 são válidos.
Não vou falar de subtração agora, pois preciso falar de números negativos e um fato sobre
computadores.
Nós, humanos, sabemos diferenciar um numero positivo de um numero negativo porque, no numero
negativo, existe um sinal de “menos”(-) antes do numero. Lembra quando eu disse que
computadores só conhecem 0 e 1? então… eles não conhecem numeros com sinais de menos…
Se vocês se lembram da escola, 5 + (-3) é o mesmo que 5 – 3, e, obviamente, 5 -3 é o mesmo que 5
+ (-3). Ou seja: A subtração de um A por um numero B é o mesmo que somar A com o B negativo.
Esta propriedade matemática também se aplica em binário, e por isto, computadores não sabem
subtrair! Eles só somam. Para subtrair, A de B, eles transformam B em um numero negativo,e em
seguida, somam. Mas, como computadores sabem quando um numero é negativo?
Quando a infomática surgiu, um número negativo era o mesmo numero positivo porém invertido: O
numero dez, em binário, é 00001010. O dez negativo é 11110101. O sistema diferencia um numero
positivo de um negativo pelo “1″ no bit mais significaivo (o mais à esquerda). Este método,
chamado de “Complemento de um”, funciona bem, o problema é que existe uma ambiguidade: E o
numero zero? 00000000 e 11111111 represemtam 0.
E isto é um GRANDE problema, pois não existe “Zero negativo”.
Para solucionar isto, foi criado o “Complemento de dois”, que funciona assim:
Sempre que ocorre uma conversão de positivo para negativo ou vice versa, além da inversão de
digitos, ocorre a soma de 1 ao valor resultante.No caso, o numero zero ficara 11111111 + 1 =
00000000.
Então, se dez positivo é 00001010, dez negativo é 11110101 + 1 = 11110110.
Para transformar dez negativo em dez positivo, basta repetir o processo: 11110110 -> 00001001 + 1
= 00001010.
Vamos testar: dez positivos somados com dez negativos, deve ser zero (10 + (-10)) = 10-10 = 0.
00001010 + 11110110 = 100000000. O 1 que sobrou é descartado pelo sistema. Isso funciona
sempre. O sistema faz testes para detectar Overflows durante a soma. O teste é simples: Se os 2
ultimos bits de “vai um” (Carry) forem 1 e 1 ou 0 e 0, a troca de sinal ocorreu de forma válida. Se
for 0 e 1 ou 1 e 0, então ocorreu um overflow.
Quando se lida com complemento de 2, o intervalo numérico representado dado um numero de bits
é o seguinte:
De -2^(N-1) até (2^(N-1))-1. Ou seja: Para 8 bits, o intervalo vai de -2^(8-1) até (2^(8-1))-1, que é o
mesmo que -2^7 até (2^7)-1, que é o mesmo que -128 até 127.
Na wikipedia, em ingles, tem uma explicação completa e detalhada sobre o complemento de 2.
Como foi possivel perceber, com 1 byte é possivel representar números entre 0 e 255, ou entre -128
e 127.
Como o sistema sabe quando um byte deve ser considerado como sendo entre 0 e 255 ou -128 e
127? Simples: Ele não sabe. O programa em execução é o responsável por definir se o byte é
Unsigned (entre 0 e 255) ou Signed (entre -128 e 127).
Espero que este texto não tenha ficado muito confuso – foi o melhor que eu pude fazer para este
tópico. O próximo artigo será mais legal: Falará sobre operações booleanas : And, Or, Xor, Not
Essa entrada foi postada em 0, 7 \07\UTC janeiro \07\UTC 2009 às 12:00 pm sob a(s) categoria(s)
Fundamentos da informatica. Você pode acompanhar as respostas desse post através do RSS
2.0feed. Você pode responder, ou rastrear de seu próprio site.
1.
• Arquivos
• abril 2009
• janeiro 2009
• dezembro 2008
• Categorias
• Criptografia
• Fundamentos da informatica
• Para usuários domésticos
• Redes
• Sem categoria
Theme: Contempt by Vault9.
Blog no WordPress.com.
Observe: 0+1:
E agora 1+1:
Este circuito realiza a soma de forma correta. Porém, ele soma somente 2 bits, ele não é muito util.
Seria interessante se desse para construir um circuito que, além dos 2 valores de entrada, recebesse
um terceiro valor de entrada. Se ligar-mos este terceiro valor de entrada na saida de overflow de
outro circuito somador, teremos um circuito de soma genérico – basta apenas cascatear os circuitos
para somar vários bits. E é isto que iremos fazer agora:
Um circuito somador completo possui esta caracteristica, e pode ser representado da seguinte
forma:
Por questões de espaço não vou mostrar cada um dos estados possiveis.
A questão é a seguinte: Este somador soma 2 valores de 1 bit, emitindo o resultado com 1 bit e se
houve ou nao overflow. Ele também possui uma terceira entrada, que representa o valor do
“Overflow Anterior”. Se ligar-mos em série vários cirtuitos destes, podemos somar 2 valores de
mais de 1 bit, como o seguinte circuito, que soma 2 valores (A e B) de 2 bits cada:
O desenho ficou um pouco confuso pois eu fui obrigado a reduzir para caber no post.
Para facilitar, colocarei 2 exemplo: A soma de 01 + 01:
Observe que o valor de Overflow é transferido para a entrada de overflow do proximo circuito –
exatamente como se faz na soma manual. Mas, e quando 11+01 for somado? O resultado é 100, que
é muito grande para a precisão de 2 bits que este circuito possui. Nesta situação, ocorre o seguinte:
Observe que o Overflow passou a ser 1, enquanto o resultado 00. Esta soma esta correta.
Para fazer um circuito capaz de somar 3, 4, 10, 1000, 10209193123 bits, basta ir interligando os
circuitos.
É importante lembrar que, o mesmo circuito de soma, é usado para subtração – a subtração é a a
mesma operação de soma, porém com o segundo valor multiplicado por -1 (ou seja: 2 – 5 é o
mesmo que 2 + (-5)).
O logisim possui uma função pré-pronta para representar o somador (há também para a subtração,
multiplicação e divisão), o simbolo é:
Que é bem mais simples de entender! O logisim possui a capacidade de fazer somadores de 2, 3, 4,
até 32 bits nativamente. Se usarmos a técnica de combinação mostrada acima, é possivel criar
circuitos para calcular qualquer quantidade de bits.