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?
- Fórum
- OTServ
- Recursos
- Scripting
- Mods, funções e outros
- dec2bin(number)
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
info
Grupo: Infante
Registrado: 13/10/08
Posts: 1.6k
Reputação: +420
Char no Tibia: Demonbholder

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
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
info
Grupo: Infante
Registrado: 13/10/08
Posts: 1.6k
Reputação: +420
Char no Tibia: Demonbholder

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
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
info
Grupo: Infante
Registrado: 13/10/08
Posts: 1.6k
Reputação: +420
Char no Tibia: Demonbholder

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.
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




info
Grupo: Conde
Registrado: 21/12/11
Posts: 750
Reputação: +268
Gênero: Masculino
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