Ir para conteúdo

dec2bin(number)


Posts Recomendados

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 por dalvorsn
Link para o comentário
Compartilhar em outros sites

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?

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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 por Demonbholder
Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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 por Demonbholder
Link para o comentário
Compartilhar em outros sites

 

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 por dalvorsn
Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...