十进制数转化为二进制数的C程序设计

温柔似野鬼°
559次浏览
2021年02月08日 09:49
最佳经验
本文由作者推荐

郭丛斌-

2021年2月8日发(作者:严倩)


十进制数转化为二进制数的


C


程序设计





一个能将任意十进制数表示成给定精度的二进制数的转换程序:







转化思路:


整数部分通过求余法可完全转化为二进制形式,


浮点部分则可以不断通过乘


二遇整取小数法转化为对应的二进制形式,只 是考虑到大部分小数不能通过乘二刚好为一,


故要控制其精度。


整数部分与小数部分的二进制形式都将保存在字符串数组中,


最后加上小


数点连接起来就是二进制的浮点数了。



代码:



#include


#include


#include



//


二进制以字符串的形式返回



char * TranDectoBin(double dec,double precision )


{



char *pbinary;



pbinary = (char*) malloc(sizeof(char)*128);



//pbinary = new(char);



int intpart = (int)dec;




double fpart = dec - intpart;



double fp = fpart;



double binfpart = 0.0;














































int a[64],b[64];//a,b


分别保存整数部 分的二进制和浮点部分的二进制



int i = 0,j = 0,k = 0;


if(intpart == 0 || intpart == 1)



a[++i] = intpart;


else


{



do




{




a[++i] = intpart%2;




intpart = intpart/


2;



} while (intpart !=0 && intpart != 1);


}


if(intpart == 1)



a[++i] = intpart;


a[0] = i;//


保存整数部分的位数



if(fpart == 0)



{




b[++j] = 0;




b[0] =j;



}


else


{



do



{




fpart *= 2;




if (fpart>=1)




{





fpart = fpart-1;





b[++j] = 1;




}




else




{





b[++j] = 0;




}




binfpart += b[j]*pow(0.5,j);



}while(fpart>0 && fp- binfpart>=precision);


}


b[0] = j;//


保存浮点位数



//


将整型部分与浮点部分合并



for (k=0;k


{



pbinary[k] = 48+a[i-k];



}



pbinary[i] = '.';//


加入“小数点”




for (k = i+1;k <= i+j;k++)



{




pbinary[k] = 48 + b[k-i];



}



pbinary[k] = NULL;



return pbinary;


}


int main()


{



double in, precision;


















}


printf(


请输入所要的精度 !


n


scanf(


//


输入


0


后结束运算



do



{



printf(


请输入要转换的十进制数!

(输入


0


后结束输入)


n



scanf(



if(in == 0)




break;



char *p = TranDectoBin(in,precision);






printf(


} while (in != 0.0);


//delete p;


/*printf(


printf(


return 0;


在


VC6.0


环境下的运行结果:


郭丛斌-


郭丛斌-


郭丛斌-


郭丛斌-


郭丛斌-


郭丛斌-


郭丛斌-


郭丛斌-