2进制转换为10进制(含有小数负数情况)
#include <stdio.h>#include <stdlib.h>
#include<math.h>
int main()
{
char jzf[100];
printf("请输入一个要转换的二进制数据串\n");
scanf("%s",jzf);
int i,k=0,j=0,t=0,z=1,cd;
float zsum=0,xsum=0.0,jg=0.0;
cd=strlen(jzf);
for(i=0;jzf[i];i++)
if(jzf[i]=='.') k=i;
if(k>0)
if(jzf[0]=='-')
{
for(i=k-1;i>=1;i--)
{zsum+=(jzf[i]*1-48)*pow(2,t);
t++;}
for(i=k+1;jzf[i];i++)
{xsum+= (jzf[i]*1-48)*pow(2,-z);
z++; }
jg=zsum+xsum;
printf("%c%f",'-',jg);
}
else
{
for(i=k-1;i>=0;i--)
{zsum+=(jzf[i]*1-48)*pow(2,t);
t++;}
for(i=k+1;jzf[i];i++)
{xsum+= (jzf[i]*1-48)*pow(2,-z);
z++; }
jg=zsum+xsum;
printf("%f",jg);
}
else
if(jzf[0]=='-')
{
for(i=cd-1;i>=1;i--)
{zsum+= (jzf[i]*1-48)*pow(2,t);
t++; }
jg=zsum;
printf("%c%f\n",'-',jg);
}
else
{
for(i=cd-1;i>=0;i--)
{zsum+= (jzf[i]*1-48)*pow(2,t);
t++;
}
jg=zsum;
printf("%f\n",jg);
}
system("pause");
return 0;
}
请大神帮忙优化下
[此贴子已经被作者于2018-4-17 11:13编辑过]