c++进制转换
十进制到其他进制转化
十进制转化成二进制的原理:如果是整数,就把该十进制整数除以2,余数保存,商接下来继续除以2,直到商为0;再从后到前保存下余数得到就是该数的二进制数。
其他进制转化原理类似;
// 十进制到二进制/八进制的转化
string decToOther(int a, int bit)
{
string b;
stack<int> st;
while (a != 0)
{
int left = a % bit;
st.push(left);
a = a / bit;
}
while (!st.empty())
{
b.push_back(st.top() + '0');
st.pop();
}
return b;
}
// 十进制到16进制的转化
string decToHex(int a)
{
string b;
unordered_map<int, char> mp{
{0, '0'},
{1, '1'},
{2, '2'},
{3, '3'},
{4, '4'},
{5, '5'},
{6, '6'},
{7, '7'},
{8, '8'},
{9, '9'},
{10, 'A'},
{11, 'B'},
{12, 'C'},
{13, 'D'},
{14, 'E'},
{15, 'F'},
};
stack<int> st;
while (a != 0)
{
int left = a % 16;
st.push(left);
a = a / 16;
}
while (!st.empty())
{
b.push_back(mp[st.top()]);
st.pop();
}
return b;
}
直接利用函数来对不同进制的数转化
#include <iostream>
#include <bitset>
using namespace std;
int main()
{
int a = 64;
cout << (bitset<32>)a << endl;
cout << oct << a << endl;
cout << dec << a << endl;
cout << hex << a << endl;
return 0;
}
#输出
0000000001000000
100
64
40
其他进制的转化 八进制到二进制,十六进制到二进制
八进制转二进制:每一位八进制的数直接用相应的3位二进制表示;二进制到八进制也类似,以小数点为界,向左每三个,向右每三个表示一个八进制数;
十六进制转二进制:每一位十六进制的数直接用相应的4位二进制表示;二进制到十六进制也类似,以小数点为界,向左每4个,向右每4个表示一个十六进制数;
八进制到十六进制的转化:先转化成二进制在转化成十六进制。