进制之间的转换在C++中十分常见,总结一下,有利于后续的学习
1,二进制转十进制
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
/*1,将二进制字符转成对应的数字
2,霍纳公式进行加和*/
int bintodecimal(char ch);
int bin2dec(const string& binarystring);
int main()
{
cout<<"Enter a bin number:";
string binarystring;
cin>>binarystring;
cout<<bin2dec(binarystring)<<endl;
return 0;
}
int bintodecimal(char ch)
{
ch=ch-'0';
return ch;
}
int bin2dec(const string& binarystring)
{
int decimalvalue=0;
for(unsigned i=0;i<binarystring.size();i++)
{
if(binarystring[i]!='0'&&binarystring[i]!='1')
{
cout <<"This is not a bin number."<<endl;
return 0;
}
else
{
decimalvalue=decimalvalue*2+bintodecimal(binarystring[i]);
}
}
return decimalvalue;
}
2,十进制转二进制
#include <iostream>
#include <string>
using namespace std;
int main()
{
cout <<"Enter a number: ";
int demical;
cin>>demical;
string bin;
while(demical!=0)
{
int binvalue=demical%2;
char binchar=static_cast<char>(binvalue+'0');
bin=binchar+bin;
demical=demical/2;
}
cout <<"The binary number is: "<< bin<<endl;
return 0;
}
3,十进制转十六进制
#include <iostream>
#include <string>
using namespace std;
int main()
{
cout<<"Enter a decimal number:";
int demical;
cin>>demical;
string hex;
while(demical!=0)
{
int hexvalue=demical%16;
char hexchar = (hexvalue<=9)?
static_cast<char>(hexvalue+'0'):
static_cast<char>(hexvalue-10+'A');
hex=hexchar+hex;//顺序不能颠倒
demical=demical/16;
}
cout<<"The hex number is "<<hex<<endl;
return 0;
}
4,十六进制转十进制
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int hexchartodecimal(char ch);
int hexdec(const string& hex);
int main()
{
/*学会写伪代码
1,将16进制各个字符转成相应的数字
2,通过霍纳算法组成10进制数*/
cout<<"Enter a hex number:";
string hex;
cin>>hex;
cout<<hexdec(hex)<<endl;
return 0;
}
int hexchartodecimal(char ch)
{
ch= toupper(ch);
if(ch>='A'&&ch<='F')
return ch-'A'+10;
else
return ch-'0';
}
int hexdec(const string& hex)
{
int decimalvalue=0;
for(unsigned i=0;i<hex.size();i++)
{
decimalvalue=decimalvalue*16+hexchartodecimal(hex[i]);
}
return decimalvalue;
}