Binário para decimal

Outro dia na faculdade começamos a ver sobre as base numéricas e conversões entre si. Foi interessante e até divertido, porém não consegui enxergar muita utilidade, pelo menos para mim.

Sempre soube que era possível representar qualquer número inteiro em binário, mas nunca parei para pensar nos com casas decimais. Nesse ponto o professor lançou um desafio valendo um ponto: converter 3.76 para binário.

25 em decimal nós todos sabemos o método para converter em binário (usar a calculadora do windows divisões sucessivas por dois).

Mas e 25,11?

Descobri, com ajuda do oráculo e da wikipédia, como converter decimais fracionários em binários.

Obtendo o método, tudo beleza, certo? Comecei a fazer.

5 linhas de cálculo…

8 linhas de cálculo…

12 linhas de cálculo…

Cansei, hora de programar isso!

#include
#include

int main() {
double numero,frac,inteira,auxiliar;
char nInt[15];
int nums[100],i=0,i2=0;

printf(“Digite o numero: “);
scanf(“%lf”,&numero);

//modf é uma função q separa inteiro de fracionario
frac = modf(numero, &inteira);

//nInt agora possui a parte inteira em binário
itoa((int)inteira,nInt,2);
//imprimimos o lado inteiro convertido para binario
printf(“%s.”,nInt);

while(frac != 0) {
//multiplicamos a parte fracionaria por 2
frac *= 2;
//separamos o fracionario do inteiro (0 ou 1)
frac = modf(frac, &auxiliar);
//guardamos o inteiro no array de nums (cast de double para int)
nums[i] = (int)auxiliar;
//incrementamos i
i++;
}

//impressão dos numeros
for(i2 = 0; i2 < i; i2++) { printf("%d",nums[i2]); } getch(); return 0; } [/sourcecode] Fui descobrir que 3.76 era... 11.1100001010001111010111000010100011110101110000101 FUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU- uma dízima. Isso pode ocorrer nesse tipo de conversão. Depois o professor ainda não acreditou que eu tinha feito o programa, "pegou da net mas pelo menos procurou né?". Disse que ia conferir o resultado antes de me dar o ponto.

O duro é que eu não sei a resposta…
Pois é, amo muito tudo isso. Fica a díca de conversão ai!

Cya!