进制转换

二进制,八进制,十进制,十六进制之间的装换,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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值