进制转换

来源:互联网 发布:抓取数据的免费软件 编辑:程序博客网 时间:2024/05/15 18:12

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


原创粉丝点击