如题所述
以下程序实现一个十进制数到二进制数的转换(该十进制数可以是正数,小数,负数和整数),源程序如下:
#include<stdio.h>
#include<math.h>
void main()
{
int i=0,j,a[20],b[20],k,c=0;
double m,x,d;
printf("请输入需要转换的数:");
scanf("%lf",&x);
if(x<0)
m=fabs(x);
else
m=x;
k=(int)m;//强制类型转换,可以使用k=(int)m;代替,从而更加的一目了然
while(k)//判定需要转换的数是否变为0
{
a[i++]=k%2;//取余,进行进制转换,但是顺序与正确值相反
k/=2;//转换一位之后进行相应的变化
}
if(m!=(int)m)//选择性计算,如果是整数就不用进行这一步的计算了,这样可以节约程序的运行时间
{
d=m-(int)m;//取小数部分
while(d!=0)
{
b[c]=(int)(d*2);//算法为×N取整
d=d*2-b[c];
c++;
if(c>=10)
break;//主要是控制小数后面万一出现无限小数的时候好跳出循环以免出现死循环
}
}
printf("转换结果为:");
if(x<0)
printf("-");
for(j=i-1;j>=0;j--)//反序输出,大于10的数字进行相应的变化
{
printf("%d",a[j]);
}
if(m!=(int)m)//选择性输出,这样可以节约输出时间和程序的运行时间
{
printf(".");
for(j=0;j<c;j++)//正序输出
{
printf("%d",b[j]);
}
}
if(c>=10)//如果是无限小数则在后以省略号表示
printf("......");
printf("\n");//输出换行,以使程序的输出结果美观
}
输入1840后计算出来的二进制则为11100110000.
如图所示为、
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
#include<stdio.h>
#include<stdlib.h>
int main()
{
int num;
printf("请输入一个要转化的十进制数:\n");
scanf("%d",&num); //输入
char str[20];
itoa(num, str, 2);
printf("%s\n", str);
return 0;
}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
运行结果: 11100110000
注:
1.itoa()函数有3个参数:第一个参数是要转换的数字,第二个参数是目标字符串,第三个参数是转移数字时所用的基数。在上例中,转换基数为2。2:十进制;10:十进制。
2.itoa(num, str, 2); 的作用是将num这个数以二进制形式的字符串形式存放在str指向的内存中。
如:itoa(10, str, 2);转化后str中字符串是“ 0001010”,10D=0001010B。
(后缀D、B分别代表十进制、二进制)
3.itoa(num, str, 10); 的作用是将num这个数以十进制形式的字符串形式存放在str指向的内存中。
如:itoa(10, str, 2);转化后str中字符串是“10”,10D = 10D。
4.使用itoa()函数时别忘记加头文件 #include<stdlib.h>
法同二楼的二进制原理
x=1840
while (x)
{
if (x&1) printf("1") else printf("0");
x>>=1;
}
printf("/n");
即可
(我学pascal的,写C++简直自虐 有错请包含)
注:输出的是倒序,倒过来的话随便弄个数组或字符串就行了本回答被提问者采纳
1.a=1840
2.i=0 位数
3.i=i+1
4.b[i]=a mod 2 取余
5.a=a div 2 取商
6.当a<>0,goto第3步
7。输出b[i..1] 连成的数就是2进制的1840
c=1840;
这样电脑就会自动帮你转化成2进制存内存中