二进制,八进制,十进制,十六进制之间的装换,C++
#include <iostream.h>
#include <math.h>
int main(int argc, char* argv[])
{
int choice;
while(choice!=5)
{
cout<<"请选择输入的进制:\n1、十进制\n2、二进制\n3、八进制\n4、十六进制\n5、退出"<<endl;
cin>>choice;
switch(choice)
{
case 1:
{
cout<<"请输入十进制数:"<<endl;
int m_digit,i,a,b; //要转换的十进制数,整数在内存中占四字节共32位
cin>>m_digit;
a=m_digit;
b=m_digit;
char bins[33]={0}; //保存转换后32个的二进制字符
for(i=0; i<32; i++) // 从最低位开始,循环取出每一位(BIT:0或1)共32位。
{
bins[31-i]=(m_digit&1)+48; //m_digit&1:将整数与1相与,相当于取出最低位;
m_digit = m_digit>>1; //加48是将对应的数字0-1变成ASCII字符'0'-'1',便于输出。
}
cout<<"二进制为:"<<bins<<endl;
char octal[12]={0};
for(i=0; i<11; i++)
{
octal[10-i]=(a&7)+48;
a = a>>3;
}
cout<<"八进制为:"<<octal<<endl;
char hex[9]={0};
for(i=0; i<8; i++)
{
if((b&15)<10)
{
hex[7-i]=(b&15)+48;
b = b>>4;
}
else
{
hex[7-i]=(b&15)+55;
b = b>>4;
}
}
cout<<"十六进制为:"<<hex<<endl;
}
break;
case 2:
{
cout<<"请输入二进制数字"<<endl;
int i,j,k,a=0,b;
char str[32];
cin>>str;
for (i=0;str[i]!='\0';i=i+1);
k=i; //位数
for (j=0;j<i;j++,k--)
{
a=a+(str[j]-48)*(int)pow(2,k-1);//二进制到十进制
}
cout<<"十进制为:"<<a<<endl;
b=a;
char octal[12]={0};
for(i=0; i<11; i++)
{
octal[10-i]=(a&7)+48;
a = a>>3;
}
cout<<"八进制为:"<<octal<<endl;
char hex[9]={0};
for(i=0; i<8; i++)
{
if((b&15)<10)
{
hex[7-i]=(b&15)+48;
b = b>>4;
}
else
{
hex[7-i]=(b&15)+55;
b = b>>4;
}
}
cout<<"十六进制为:"<<hex<<endl;
}
break;
case 3:
{
cout<<"请输入八进制数字"<<endl;
int i,j,k,a=0,b;
char str[11];
cin>>str;
for (i=0;str[i]!='\0';i=i+1);
k=i; //位数
for (j=0;j<i;j++,k--)
{
a=a+(str[j]-48)*(int)pow(8,k-1);//八进制到十进制的转换
}
cout<<"十进制为:"<<a<<endl;
b=a;
char bins[33]={0};
for(i=0; i<32; i++)
{
bins[31-i]=(a&1)+48;
a = a>>1;
}
cout<<"二进制为:"<<bins<<endl;
char hex[9]={0};
for(i=0; i<8; i++)
{
if((b&15)<10)
{
hex[7-i]=(b&15)+48;
b = b>>4;
}
else
{
hex[7-i]=(b&15)+55;
b = b>>4;
}
}
cout<<"十六进制为:"<<hex<<endl;
}
break;
case 4:
{
cout<<"请输入十六进制数字"<<endl;
int i,j,k,a=0,b;
char str[8];
cin>>str;
for (i=0;str[i]!='\0';i=i+1);
k=i; //位数
for (j=0;j<i;j++,k--)
{
if (str[j]<=57)
{
a=a+(str[j]-48)*(int)pow(16,k-1);
}
else
{
a=a+(str[j]-55)*(int)pow(16,k-1);
}
}
cout<<"十进制为:"<<a<<endl;
b=a;
char bins[33]={0};
for(i=0; i<32; i++)
{
bins[31-i]=(a&1)+48;
a = a>>1;
}
cout<<"二进制为:"<<bins<<endl;
char octal[12]={0};
for(i=0; i<11; i++)
{
octal[10-i]=(b&7)+48;
b = b>>3;
}
cout<<"八进制为:"<<octal<<endl;
}
break;
}
}
return 0;
}