sábado, 1 de setembro de 2012

[Cálculo Numérico] Aula 9: sinal digital pra decimal, sistema octal

1. Converta o sinal digital abaixo (binário) para decimal:
a) 10000001
Se é um sinal digital de 8 bits e está iniciando com 1, temos que é um número negativo. Então vamos convertê-lo pra positivo pra fazer a operação primeiro, fazendo o oposto que fazemos de positivo pra negativo: complemento de um, depois subtrai 1 (soma -1) já que na outra conversão se somava 1.
Complemento de 1
10000001
01111110

Soma (-1)
Primeiro, vale a pena lembrar quem é -1:
1 = 00000001
(Compl. de 1) + 1: (11111110) + 1 = 11111111
Logo, a operação final fica:
01111110 +
11111111
0+1 = 1

1+1 = 10, fica 0 e vai 1
1+1+1 = 11, fica 1 e vai 1
E isso se repete até a última casa, aonde fica 1+1 = 10, fica 0 e vai 1, que some porque sai da última casa do sinal digital.
Sendo assim, temos que esse binário fica: 01111101
Convertendo pra decimal:

$$-n = 1 * 2^0 + 0 * 2^1 + 1 * 2^2 + 1 * 2^3 + 1 * 2^4 + 1 * 2^5 + 1 * 2^6 + 0 * 2^7 \\
1 + 4 + 8 + 16 + 32 + 64 = 125_{10} \\
n = -125_{10}$$
Mas aí uma regra muito doida que eu não entendi se surgiu de algum lugar ou é apenas magia negra diz que você acrescenta -2 ao resultado final, sendo assim, o número é na verdade -127 em decimal. Simplesmente isso.

b) 10010011
Mesma coisa:
Complemento de 1
10010011
01101100

Soma (-1)
01101100 +
11111111
0+1 = 1
0+1 = 1
1+1 = 10, fica 0 e vai 1
1+1+1 = 11, fica 1 e vai 1
1+1 = 10, fica 0 e vai 1
1+1+1 = 11, fica 1 e vai 1
1+1+1 = 11, fica 1 e vai 1
1+1 = 10, fica 0 e vai 1, que é desconsiderado porque explode os 8 bits
Resultado em binário: 01101011
Pra decimal:
$$-n = 1*2^0 + 1*2^1 + 0*2^2 + 1*2^3 + 0*2^4 + 1*2^5 + 1*2^6 + 0*2^7 = \\
1 + 2 + 8 + 32 + 64 =  107 \\
n = -107_{10}$$
Menos 2, -109 decimal.

c) 11111111
Complemento de 1
11111111
00000000

Soma (-1)
00000000 +
11111111
11111111
Eu por algum motivo tenho anotado na aula +255 aqui, mas preciso de uma luz nesse. A lógica passada é a seguinte: vai dar -255, menos 2 vai estourar e ir pra +256 e depois +255, mas não lembro se sinal digital vai de -255 a +256 ou de -127 a +128, então para todos os efeitos fiquem com a resposta da aula e perguntemos ao professor depois.


Sistema Octal

Sistema de 8 dígitos: 0, 1, 2, 3, 4, 5, 6, 7, 8.

Converter octal para decimal:

$$123.3_8 = 1 * 8^2 + 2 * 8^1 + 3 * 8^0 + 3 * 8^{-1} \\
123.3_8 = 83.375_{10}$$

Converter decimal em octal:

223
223/8 = 27, resto 7.
27/8 = 3, resto 3.
3/8 = 0, resto 3.
O número então vai dar 0337, ou simplesmente 337 em octal.
495,25
Parte normal
495/8 = 61, resto 7.
61/8 = 7, resto 5.
7/8 = 0, resto 7.
Ou seja, 757.
Parte fracionária: você vai fazer mais ou menos como no binário, multiplicar por 8 o tanto de casas que for preciso e ir pegando o último número. Sobrando 0,00, chega-se à última casa.
0,25 x 8 = 2,00
Pega o 2, deixa o resto, fica 0,00. Então o resultado final é:
757,2


Converter binário em octal

Esse é o mais simples, veja bem:
1011011001
Você vai fragmentar o binário de 3 em 3, contando a partir do primeiro, e vai formar algarismos de 0 a 7 com eles. Simples assim. Veja esse exemplo:
1.011.011.001
1.3.3.1, logo 1331 em octal. (lembrando que o primeiro, isolado, você pode considerar dois zero à esquerda se quiser)

1001110111,100101010
Antes da vírgula, da direita pra esquerda: 1.001.110.111<
1.1.6.7
Depois da vírgula, da esquerda pra direita: 100.101.010
4.5.2
Logo, 1167,452 em octal.


Converter octal em binário

Faça o oposto: pegue cada algarismo do octal e trunque em binários. Veja esse exemplo:
523 em octal
5 = 101
2 = 010
3 = 011
Logo, 101010011. Vale a pena lembrar que a não ser que vá sobrar zero à esquerda ou à direita no algarismo final (ou seja, último algarismo inteiro à esquerda, e fracionário à direita), você obrigatoriamente tem que conservar o 0 do binário.


Exercícios

1. Converta de decimal para octal com 4 dígitos na parte fracionária:
a) 102,4
Parte inteira:
102/8 = 12, sobra 6.
12/8 = 1, sobra 4.
1/8 = 0, sobra 1.
Logo, 146.
Parte fracionária:
0,4 x 8 = 3,2
0,2 x 8 = 1,6
0,6 x 8 = 4,8
0,8 x 8 = 6,4
Logo, 0,3146.
No total, fica: 146,3146 em octal.

b) 1004,5
Parte inteira:
1004/8 = 125, sobra 4.
125/8 = 15, sobra 5.
15/8 = 1, sobra 7.
1/8 = 0, sobra 1.
Logo, 1754.
Parte fracionária:
0,5 x 8 = 4,0
Logo, 0,4.
No total: 1754,4 em octal.

c) 723,45
Parte inteira:

723/8 = 90, sobra 3.
90/8 = 11, sobra 2.
11/8 = 1, sobra 3.
1/8 = 0, sobra 1.
Logo, 1323.
Parte fracionária:
0,45 x 8 = 3,6
0,6 x 8 = 4,8
0,8 x 8 = 6,4
0,4 x 8 = 3,2
Logo, 0,3463.
No total: 1323,3463.

2. Converta de octal para decimal:
a) 732,1

Só fazer a conta tradicional:
$$7 * 8^2 + 3 * 8^1 + 2 * 8^0 + \dfrac{1}{8} = 448 + 24 + 2 + 0.125 = 474.125_{10}$$
b) 423,6
$$4 * 8^2 + 2 * 8^1 + 3 * 8^0 + \dfrac{6}{8} = 256 + 16 + 3 + 0.75 = 275.75_{10}$$

c) 1004,123
$$1 * 8^3 + 0 * 8^2 + 0 * 8^1 + 4 * 8^0 + \dfrac{1}{8} + \dfrac{1}{8^2} + \dfrac{1}{8^3} \\
512 + 4 + 0.125 + 0.03125 + 0.005859375 = 516.162109375_{10}$$

3. Converta de binário para octal:
a) 11100111
011.100.111
3.4.7
Logo, 347.
b) 1100111
001.100.111
1.4.7
Logo, 147.
c) 1111011
001.111.011
1.7.3
Logo, 173.
d) 10,000010001
Parte inteira: 010. Logo, 2.
Parte fracionária:
000.010.001
0.2.1
Logo, 0,021.
Sendo assim, o total é 2,021.

Já vou postando a outra aula e a de equações diferenciais, não confirmo de algoritmo e estrutura de dados ainda porque acho melhor o professor passar o algoritmo dele e tal pra não confundir ninguém. Aliás, estou realmente cogitando postar estrutura de dados porque é uma matéria muito mais complexa que programação comum, mas ainda envolve muito código e acho código extremamente pessoal, daí não sei uma maneira de passar um "código didático" pra vocês que estão interessados.
Discutam aí, se alguém souber essa maneira e quiser passar aqui no blog também, sem problema.

No mais, bom dia a todos.

Nenhum comentário:

Postar um comentário