进制转换模板
二进制、八进制、十进制、十六进制之间的互相转换
进制转换
二进制
八进制
十六进制
GESP3
#include <bits/stdc++.h>
using namespace std;
int main() {
// ====== 1. 任意进制 → 十进制 ======
// 手动:按位权展开
// 二进制 1101 → 1×8+1×4+0×2+1×1 = 13
string bin = "1101";
int dec = stoi(bin, nullptr, 2); // 13
cout << dec << endl;
// ====== 2. 十进制 → 任意进制 ======
// 手动:短除法
int n = 13;
// 转 2 进制
string result;
while (n > 0) {
result = char('0' + n % 2) + result;
n /= 2;
}
cout << result << endl; // 1101
// ====== 3. C++ 格式化输出 ======
n = 255;
cout << oct << n << endl; // 377 (8进制)
cout << dec << n << endl; // 255 (10进制)
cout << hex << n << endl; // ff (16进制)
// ====== 4. bitset 查看二进制 ======
cout << bitset<8>(13) << endl; // 00001101
cout << bitset<16>(13) << endl; // 0000000000001101
// ====== 5. 通用进制转换函数 ======
// 十进制转 k 进制
auto toBase = [](int num, int base) -> string {
if (num == 0) return "0";
string res;
while (num > 0) {
int r = num % base;
res = (char)(r < 10 ? '0' + r : 'A' + r - 10) + res;
num /= base;
}
return res;
};
cout << toBase(255, 16) << endl; // FF
cout << toBase(13, 2) << endl; // 1101
return 0;
}
📖 要点说明
- 任意进制→十进制:按位权展开,如
1101₂ = 1×8+1×4+0×2+1×1 - 十进制→任意进制:短除法,余数倒序排列
stoi(s, nullptr, base)可把字符串从指定进制转十进制
⚠️ 常见错误
- 短除法余数要倒序排列,不是正序
- 十六进制 A~F 忘处理
- 进制转换中 0 的特殊处理