c++中怎么使一个十进制的数转为2进制,4进制,8进制,16进制?

说明白点,我刚开始学,谢谢了

先将十进制转换成2进制,再由2进制转换成4、8、16进制
存放转换后的2、4、8、16进制的数组为字符串,方便显示。
数制之间的转换,十进制先转换为2进制,输入十进制到int型变量x中,一直进行x/2并取模x%2直到x=0,放到数组a[]中,代码实现为
while(x!=0)
{
a[i++]=x%2;
x=x/2;
}
数组a[]便是x的2进制的倒序,将a[]倒序并转换为字符放到b[]中,代码实现
for(j=0;j<i;j++)
b[j]=a[i-j-1]+48;
b[i]=0;
其中+48是将整型数转换为字符型
其次就要将2进制转换成4、8、16进制,从低位算起,所以用数组a[]来计算
2进制转4进制,用两位比特(0或1)2进制转换成4进制,如10=1*2+0=2,11=1*2+1=3,代码实现
for(k=i/2+rem(i,2),j=0;j<i;j+=2)
c[--k]=a[j]+a[j+1]*2+48;
c[i/2+rem(i,2)]=0;
其中c[i/2+rem(i,2)]=0;语句是赋值给字符串结束符,rem是调用我自己写的函数,原型为
int rem(int a,int b)
{
if(a%b==0)return 0;
else return 1;
}
作用是计算二进制的位数是否是2的倍数,是则返回0,否则返回1
2进制转8进制,用三位比特转换,如101=1*4+0*2+1=5,110=1*4+1*2+0=6,代码实现
for(k=i/3+rem(i,3),j=0;j<i;j+=3)
d[--k]=a[j]+a[j+1]*2+a[j+2]*4+48;
d[i/3+rem(i,3)]=0;
2进制转换为16进制,1101=1*8+1*4+0*2+1=13,即16进制的D,
取str[]="0123456789ABCDEF",16进制的值即为str字符串的下标,如str[13]=D,将1101最终转换为D,代码实现为
for(k=i/4+rem(i,4),j=0;j<i;j+=4)
e[--k]=str[a[j]+a[j+1]*2+a[j+2]*4+a[j+3]*8];
e[i/4+rem(i,4)]=0;
————————————————————————————
全部代码:
#include<iostream.h>
int rem(int a,int b)
{
if(a%b==0)return 0;
else return 1;
}
void main()
{
int i=0,j,k,x,a[50];
char b[50],c[20],d[20],e[20],str[]="0123456789ABCDEF";
cout<<"整数:"<<flush;
cin>>x;
for(j=0;j<50;j++)
a[j]=0;
while(x!=0)
{
a[i++]=x%2;
x=x/2;
}
for(j=0;j<i;j++)
b[j]=a[i-j-1]+48;
b[i]=0;
for(k=i/2+rem(i,2),j=0;j<i;j+=2)
c[--k]=a[j]+a[j+1]*2+48;
c[i/2+rem(i,2)]=0;
for(k=i/3+rem(i,3),j=0;j<i;j+=3)
d[--k]=a[j]+a[j+1]*2+a[j+2]*4+48;
d[i/3+rem(i,3)]=0;
for(k=i/4+rem(i,4),j=0;j<i;j+=4)
e[--k]=str[a[j]+a[j+1]*2+a[j+2]*4+a[j+3]*8];
e[i/4+rem(i,4)]=0;
cout<<"二进制:"<<b<<endl;
cout<<"四进制:"<<c<<endl;
cout<<"八进制:"<<d<<endl;
cout<<"十六进制:"<<e<<endl;
}
——————————————————————————
编译通过,运行成功,请采纳!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-27
你是做一个程序来达到这个效果 还是说就是光计算怎么转换
相似回答