dalvorsn 268 Postado Abril 4, 2014 Share Postado Abril 4, 2014 (editado) 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 5, 2014 por dalvorsn Link para o comentário Compartilhar em outros sites More sharing options...
Oneshot 732 Postado Abril 7, 2014 Share Postado Abril 7, 2014 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 More sharing options...
dalvorsn 268 Postado Abril 7, 2014 Autor Share Postado Abril 7, 2014 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 More sharing options...
Demonbholder 420 Postado Abril 9, 2014 Share Postado Abril 9, 2014 (editado) 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, 2014 por Demonbholder Link para o comentário Compartilhar em outros sites More sharing options...
dalvorsn 268 Postado Abril 10, 2014 Autor Share Postado Abril 10, 2014 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 More sharing options...
Demonbholder 420 Postado Abril 10, 2014 Share Postado Abril 10, 2014 (editado) 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, 2014 por Demonbholder Link para o comentário Compartilhar em outros sites More sharing options...
dalvorsn 268 Postado Abril 10, 2014 Autor Share Postado Abril 10, 2014 (editado) 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, 2014 por dalvorsn Link para o comentário Compartilhar em outros sites More sharing options...
Demonbholder 420 Postado Abril 10, 2014 Share Postado Abril 10, 2014 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. Link para o comentário Compartilhar em outros sites More sharing options...
dalvorsn 268 Postado Abril 10, 2014 Autor Share Postado Abril 10, 2014 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 More sharing options...
Oneshot 732 Postado Abril 10, 2014 Share Postado Abril 10, 2014 Que lindo isso essa explicação, curti o esquema de armazenar números fracionários na memória. Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados