- C++
进制转换
- @ 2026-2-2 17:18:47
🌟进制转换
一、进制基础知识
⭐ 常见进制
| 进制 | 名称 | 数字范围 | 逢几进一 |
|---|---|---|---|
| 2 | 二进制 | 0~1 | 2 |
| 8 | 八进制 | 0~7 | 8 |
| 10 | 十进制 | 0~9 | 10 |
| 16 | 十六进制 | 0~9 A~F | 16 |
⭐ 核心公式(必须理解)
数值 = 每位 × 进制^位数
例:
1011(2)
= 1×2³ + 0×2² + 1×2¹ + 1×2⁰
= 11
二、十进制 → 其他进制(除法取余法)
⭐ 通用口诀
除几取余
倒序输出
🎯 例1:13 → 二进制
手算过程
| 商 | 余数 |
|---|---|
| 13÷2=6 | 1 |
| 6÷2=3 | 0 |
| 3÷2=1 | 1 |
| 1÷2=0 |
倒序:
1101
⭐ 一级纯基础代码
int n;
cin >> n;
int a[100], cnt=0;
while(n)
{
a[cnt++] = n%2;
n/=2;
}
for(int i=cnt-1;i>=0;i--)
cout<<a[i];
🎯 改成八进制
只需改一行:
a[cnt++] = n%8;
n/=8;
🎯 改成十六进制
手算示例:255
| 商 | 余数 |
|---|---|
| 255÷16=15 | 15(F) |
| 15÷16=0 |
结果:
FF
代码
while(n)
{
a[cnt++] = n%16;
n/=16;
}
for(int i=cnt-1;i>=0;i--)
{
if(a[i]<10)
cout<<a[i];
else
cout<<char(a[i]-10+'A');
}
三、其他进制 → 十进制(乘法累加法)
⭐ 通用口诀
从左到右
乘进制再加当前位
🎯 例:1101 → 十进制
手算表
| 步骤 | 计算 | 结果 |
|---|---|---|
| 初始 | 0 | |
| 读1 | 0×2+1 | 1 |
| 1×2+1 | 3 | |
| 读0 | 3×2+0 | 6 |
| 读1 | 6×2+1 | 13 |
⭐ 一级纯基础代码(输入为整数)
int n;
cin >> n;
int ans=0;
while(n)
{
int d=n%10;
ans+=d;
ans*=2;
n/=10;
}
ans/=2;
cout<<ans;
🎯 十六进制 → 十进制
手算示例:1A
A → 10
= 1×16 + 10
= 26
四、printf 快速转换(考试最省事 ⭐⭐⭐⭐⭐)
⭐ 不写算法直接输出
八进制
printf("%o", n);
十六进制
printf("%x", n); // 小写
printf("%X", n); // 大写
⭐ 示例
int n=26;
printf("%o\n",n); // 32
printf("%X\n",n); // 1A
五、三种方法对比
| 方法 | 难度 | 推荐场景 |
|---|---|---|
| 手算 | ⭐⭐ | 理解原理 |
| while数组 | ⭐⭐⭐⭐ | 考试写代码 |
| printf | ⭐⭐⭐⭐⭐ | 最快做题 |
六、一级必背模板合集
⭐ 十 → 二
while(n){a[cnt++]=n%2;n/=2;}
⭐ 十 → 八
printf("%o",n);
⭐ 十 → 十六
printf("%X",n);
⭐ 二 → 十
ans=ans*2+d;
七、终极记忆口诀
除2除8除16
余数倒着写
乘2乘8乘16
从左累加
八进制用%o
十六进制用%x
0 条评论
目前还没有评论...