十进制数转化为二进制数的C程序设计
郭丛斌-
十进制数转化为二进制数的
C
程序设计
一个能将任意十进制数表示成给定精度的二进制数的转换程序:
p>
转化思路:
整数部分通过求余法可完全转化为二进制形式,
浮点部分则可以不断通过乘
二遇整取小数法转化为对应的二进制形式,只
是考虑到大部分小数不能通过乘二刚好为一,
故要控制其精度。
整数部分与小数部分的二进制形式都将保存在字符串数组中,
最后加上小
数点连接起来就是二进制的浮点数了。
代码:
#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
环境下的运行结果: