🌟进制转换

一、进制基础知识

⭐ 常见进制

进制 名称 数字范围 逢几进一
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 条评论

目前还没有评论...