sábado, 25 de agosto de 2012

[Cálculo Numérico] Aula 7: fração decimal pra binária

Decimal para Binário (Nº fracionário)

Peguemos o número 35,625 na base 10. Vamos convertê-lo para binário.
1º Passo: separamos as partes inteiras das fracionárias:
35 + 0,625
A parte inteira é bem fácil. Como o número é menor que 256, ao invés de fazer divisão, é mais fácil usar aquele método que o professor passou de ordenar decrescentemente as potências de 2:
32 - 16 - 8 - 4 - 2 - 1
É intuitivo, deve ter um método matemático pra descobrir o que usar, mas honestamente... Não é necessário. É só pensar um pouquinho. Queremos chegar ao 35, então 32+2+1 resolve.
Logo:
32 - 16 - 8 - 4 - 2 - 1
1 - 0 - 0 - 0 - 1 - 1

Logo:
$$35_{10} = 100011_2$$
Para a fracionada, temos a seguinte metodologia: ao invés de sair dividindo como feito na aula passada, vamos multiplicando por 2, pegando o algarismo depois da vírgula e removendo ele pra colocar no binário. E repetindo até chegar no tanto de casas após a vírgula exigidas. Ao contrário do binário inteiro, o fracionário segue ordem normal.
Explicando fica meio complicado mesmo, então vamos fazer na prática que dá pra entender bem:
$$0.625 \times 2 = 1.250$$
Pegamos esse 1 depois da vírgula, deixamos 0,250 e multiplicamos ele por 2 de novo.
$$0.250 \times 2 = 0.5$$
Pegamos o 0, repetimos o processo:
$$0.5 \times 2 = 1$$
Pegamos o 1 e terminamos o número. Esse caso é bom porque é perfeito: o número tem um fim simples. Muitos deles serão gigantescos e o exercício exigirá um mínimo de casas, então não se preocupe tanto com isso. E o resultado final?
$$0.625_{10} = 0.101_2$$
Logo:
$$35.625_{10} = 100011.101_2$$

Exercícios:
1. Converter para decimal.
a) 11010101011
Binário pra decimal é deveras simples, está na outra aula o método. Só sair somando:
$$1*2^0 + 1*2^1 + 0*2^2 + 1*2^3 + 0*2^4 + 1*2^5 + \\ 0*2^6 + 1*2^7 + 0*2^8 + 1*2^9 + 1*2^{10}$$
$$1 + 2 + 0 + 8 + 0 + 32 + 0 + 128 + 0 + 512 + 1024 \\
1707_{10}$$
b) 1,01010101
Mesma coisa, só que com valores mais feios:
$$(1 * 2^0) + (0 * 2^{-1} + 1 * 2^{-2} + 0 * 2^{-3} + 1 * 2^{-4} + \\ 0 * 2^{-5} + 1 * 2^{-6} + 0 * 2^{-7} + 1 * 2^{-8}$$
$$(1) + (0 + 0.25 + 0 + 0.0625 + 0 + 0.015625 + 0 + 0.00390625) \\
1 + (0.33203125) \\
1.33203125_{10}$$
c) 11011,1101
Agora juntando o útil ao agradável:
$$(1 * 2^4 + 1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 1 * 2^0) + (1 * 2^{-1} + 1 * 2^{-2} + 0 * 2^{-3} + 1 * 2^{-4}) \\
(16 + 8 + 0 + 2 + 1) + (0.5 + 0.25 + 0 + 0.0625) \\
27 + 0.8125 \\
27.8125_{10}$$

2. Converter para binário com 5 dígitos.
a) 234,435
Primeiro, a parte antes da vírgula (234):
128 - 64 - 32 - 16 - 8 - 4 - 2 - 1
128+64 = 192
192+32 = 224
224+16 = 240, então pulamos pro próximo.
224+8 = 232
Sabemos que é somando 2 que temos 234, óbvio, então:
128 - 64 - 32 - 16 - 8 - 4 - 2 - 1
1 - 1 - 1 - 0 - 1 - 0 - 1 - 0

234 = 11101010 em decimal
Pra parte depois da vírgula, 435:
0,435 x 2 = (0),87
0,870 x 2 = (1),74

0,740 x 2 = (1),48
0,480 x 2 = (0),96
0,960 x 2 = (1),92
E tá bom, né, pediu 5 casas decimais depois da vírgula.

Ou seja:
$$0.435 = 0.01101_2 \\
234.435 = 11101010.01101_2$$
b) 12,234
Parte depois da vírgula:
8 - 4 - 2 - 1

1 - 1 - 0 - 0
(acho que é muito "de cabeça" que 12 = 8 + 4)
Pro 0,234:
0,234 x 2 = (0),474
0,474 x 2 = (0),948
0,948 x 2 = (1),896
0,896 x 2 = (1),792
0,792 x 2 = (1),584
Logo:

$$0.234 = 0.00111_2 \\
12.234 = 1100.00111_2$$
c) 43,956
Parte depois da vírgula:

32 - 16 - 8 - 4 - 2 - 1
32 + 16 = 48, passa.

32 + 8 = 40
40 + 4 = 44, passa.
40 + 2 = 42
42 + 1 = 43
Logo:
32 - 16 - 8 - 4 - 2 - 1
1 - 0 - 1 - 0 - 1 - 1
Assim, 43 = 101011.

Agora, pro que vem depois da vírgula:
0,956 x 2 = (1),912
0,912 x 2 = (1),824
0,824 x 2 = (1),648
0,648 x 2 = (1),296
0,296 x 2 = (0),592
E 0,956 fica em 5 casas decimais até 0,11110. E:

$$43.956 = 101011.11110_2$$

Operações com binário

Adição de dois termos: escreva em binário o nº 2.
$$2 + 2 = 4 \\
4_{10} = 10_2 + 10_2 \\
10_2 + 10_2 = 100_2$$
A regra é a seguinte:
0 + 0 = 0
1 + 1 = 10
1 + 0 = 1
0 + 1 = 1

Veja a seguinte conta (com o sinal do outro lado por conveniência):

1101101 +
1001101
Vamos fazer a operação normalmente de trás pra frente, passo a passo, como se fazia no primário. Lembrando que 1+1 = 10. Então fica 0 e sobe 1.
Primeira casa: 1+1 = 10. Fica 0, sobe 1.
Segunda casa: 0+0+1 = 1. Fica 1.
Terceira casa: 1+1 = 10. Fica 0, sobe 1.
Quarta casa: 1+1+1 = 11. Fica 1, sobe 1.
Quinta casa: 0+0+1 = 1. Fica 1.
Sexta casa: 1+0 = 1. Fica 1.
Sétima casa: 1+1 = 10. Como é a última casa, fica 10.
Pega tudo o que está na frente do "fica", obviamente na ordem inversa (da sétima pra primeira):

(10)(1)(1)(1)(0)(1)(0)
Logo, o resultado é: 10111010.

Se tiver qualquer dificuldade nisso, o mais recomendado é pegar algum livro de cálculo numérico ou eletrônica digital e sair queimando todos os exercícios até entender perfeitamente o que está acontecendo. Só dá trabalho, mas é facinho.
Também sei que a estrutura do post ficou meio estranha, não sei ao certo qual seria a melhor pra trabalhar aqui. Se ficou muito pouco claro pra quem tá estudando, sou aberto a sugestões de modelos diferentes.
Gratíssimo, boa noite.

2 comentários:

  1. Ou se preferir, uma forma prática é usar uma calculadora que faça a conversão de decimal para binário.
    -A parte inteira é convertida diretamente pelas calculadoras.
    -Para a parte fracionária é necessário, definir a quantidade de bits (F) que deseja usar na parte fracionária, e multiplicar o número por 2^F. Isso resulta no deslocamento dos bits de F. converta para binário, e conte os bits da direita para esquerda (F são a parte fracionária) os demais a parte inteira.

    ResponderExcluir