DA

dec2bin(number)

Por dalvorsn, 04 de abr. de 2014 em Mods, funções e outros

10
1.7k
dalvorsnD
04 de abril de 2014 às 20:47

dec2bin(number)

» Descrição: Função que converte números decimais em binários, inclusive quando são fracionários.
» Autor: Dalvo


x8AGXnqk[/pastebin]

Editado Abril 4 por dalvorsn

OneshotO
07 de abril de 2014 às 08:20

Você estava discutindo isso comigo no Skype e eu nem dei atenção direito. Enfim, você falou que ele arredonda os resultados, então, tecnicamente não dá para converter o binário resultante para o número racional original, certo?

dalvorsnD
07 de abril de 2014 às 13:25

ua

Você estava discutindo isso comigo no Skype e eu nem dei atenção direito. Enfim, você falou que ele arredonda os resultados, então, tecnicamente não dá para converter o binário resultante para o número racional original, certo?

Isso, ele faz sempre arredondamento, porque sao bases diferentes, uma base 10 para base 2, o que é 0.3 na base 10 nao pode ser representado na base 2, dai arredonda.

Inclusive na memoria funciona assim também, pois ele trabalha com numeros binarios, o numero é sempre arredondado quando em float

09 de abril de 2014 às 16:31

Irado, seria legal fazer com número negativos. No caso, você acha o número em binário e depois usa o complemento de dois.

 

Outra sugestão é fazer uma função geral de conversão de bases (não sei se já existe).

Editado Abril 9 por Demonbholder

dalvorsnD
09 de abril de 2014 às 23:37

Irado, seria legal fazer com número negativos. No caso, você acha o número em binário e depois usa o complemento de dois.

 

Outra sugestão é fazer uma função geral de conversão de bases (não sei se já existe).

Na memoria o numero negativo o que muda é um bit só

São dois byte(16 bits)

  • 1 bit para o sinal do número
  • 1 bit para o sinal do expoente
  • 4 bits para o expoente
  • 10 bits para a mantissa

 

Quanto a fazer uma função geral, a parte inteira é bem facil, e fica ate pequeno, porem a decimal, nossa, da uma trabalheira kk, teria que fazer uma seria de elseifs para fazer a parte decimal e cada um com sua regra, mas é possivel de fazer sim

09 de abril de 2014 às 23:55

Na memoria o numero negativo o que muda é um bit só

São dois byte(16 bits)

  • 1 bit para o sinal do número
  • 1 bit para o sinal do expoente
  • 4 bits para o expoente
  • 10 bits para a mantissa

 

Quanto a fazer uma função geral, a parte inteira é bem facil, e fica ate pequeno, porem a decimal, nossa, da uma trabalheira kk, teria que fazer uma seria de elseifs para fazer a parte decimal e cada um com sua regra, mas é possivel de fazer sim

 

Ah, então hoje a arquitetura é bem diferente... no início era só soma, por isso se usava o complemento de dois.

 

Não sei como você calcula a parte fracionária, mas eu aprendi uma regra da multiplicação, acho que isso pode facilitar.

Editado Abril 10 por Demonbholder

dalvorsnD
10 de abril de 2014 às 13:57

 

Ah, então hoje a arquitetura é bem diferente... no início era só soma, por isso se usava o complemento de dois.

 

Não sei como você calcula a parte fracionária, mas eu aprendi uma regra da multiplicação, acho que isso pode facilitar.

Vou dar um exemplo:

Como ficaria o numero 10.25 na memoria:

Primeiro voce converte ele para binario, fica: 1010.01

Apos isso faz a normatização do mesmo, que consiste basicamente em levar todos os valores para direita da virgula por meio de notação cientifica, ficando:

0.101001*2^4

Pronto, agora temos tudo para montar o valor na memoria.

a parte fracionaria é chamada de mantissa, correspondente a 101001 no exemplo

[1 bit sinal expoente] [1 bit sinal do numero] [4 bits expoente] [10 bits mantissa]
           0                    0                   0100             0000101001  
(0 pois é positivo)       (0 pois é positivo)      (4 em binário)    (parte fracionaria)

Sendo assim a representação na memoria fica: 0000100000101001

Editado Abril 10 por dalvorsn

10 de abril de 2014 às 14:31

Hmmm não sabia que ele era salvo assim na memória, valeu pela explicação.

 

Só um correção, 4 em binário seria 0100.

dalvorsnD
10 de abril de 2014 às 14:35

Hmmm não sabia que ele era salvo assim na memória, valeu pela explicação.

 

Só um correção, 4 em binário seria 0100.

omg, nem notei que coloquei errado kkk

;D

OneshotO
10 de abril de 2014 às 14:58

Que lindo isso essa explicação, curti o esquema de armazenar números fracionários na memória.