3
So does anyone here know how I do to convert 1.01010101 for base 10 in the case this based on 2 "binary" the answer is that in base10 1.3320312510 . I need the logic to handle this case ..
att
#include<stdio.h>
#include<stdlib.h>
int c[18],bcd[20];
//Função de conversão de decimal para binário
void conv_d2b ( unsigned long x,int *c)
{
int i;
for(i=0; i<18; i++)
*(c++)=(x>>i)&0x1;
}
int main()
{
int escolha;
double bina ,deci ;
int k;
unsigned long int j,x;
int pos, decimal=0;
char numb[17];
int cont=0;
printf("Conversor de numeros binarios e decimais \n\n");
printf(" ----------Menu----------\n 1 - Binario para decimal\n 2 - Decimal para binario\n 3 - Decimal fracionario para binario\n 4 - Binario'flutuante' fracionario para Decimal\n 5 - Exit\n\n Opcao: ");
scanf("%d", &escolha);
switch(escolha)
{
case 1:
//Conversão de BInarios para Decimal
printf("Digite um numero Binario qualquer");
scanf("%s",numb);
//Processamento da informação
for (pos=strlen(numb) -1; pos >=0; pos--)
decimal=decimal + (numb[cont++] - '0')*pow(2,pos);
//Exibindo a informação
printf("Seu numero Binario em Decimal eh: %d\n\n", decimal);
break;
case 2:
printf("Digite o numero que deseja converter :");
scanf("%lu",&x);
printf("\n\n \t Decimal\t Binario\n");
printf(" ---- %lu\t ", x);
conv_d2b(x,c);
for(k=17; k>=0; k--)
printf("%d",c[k]);
printf("\n\n\r");
break;
case 3:
break;
case 4:
break;
case 5:
exit(0);
break;
default:
printf("Opcao invalida");
break;
}
return 0;
}
I did something like this
int main()
{
int inteiro, binarioInt = 0, i = 1;
float binarioFrac = 0, k =0.1f, frac, temp1, binarioTotal, f;
printf("***** Converter valor FLOAT para BINARIO *******\n");
printf("***** POR FAVOR UTILIZE PONTO PARA SEPARAR OS NUMEROS *******\n");
printf("\nEnter com o valor : ");
scanf("%f",&f);
//Separando parte inteira
inteiro = (int)f;
//Separanto parte fracionada
frac = f - (int)f;
//Loop para converter decimal parte inteira em binario
while(inteiro>0)
{
binarioInt = binarioInt + inteiro % 2 * i;
i = i * 10;
inteiro = inteiro / 2;
}
//Loop para converter fracao em binario
while(k>0.00000001)
{
temp1 = frac *2;
binarioFrac = binarioFrac+((int)temp1)*k;
frac = temp1 - (int)temp1;
k = k / 10;
}
//
binarioTotal = binarioInt +binarioFrac;
printf(" \nbinary equivalent = %lf\n\n\n\n\n", binarioTotal);
}
Where possible it is preferable to use
double
for floating point numbers. All operations withfloat
first convert this value to the typedouble
, for example:float x = 4.2; x *= 2; /* operação feita em double */
. In addition the current arithmetic processors are optimized for the typedouble
making operations with typesfloat
are slower although the number of bits used is smaller.– pmg
Great tip, I’ll use next time!!!
– Matheus Francisco