🎁 当前为 免费试看 内容 · 开通VIP 解锁 GESP 通关手册全部 1–8 级知识点 + 题库 + 详细解析
🌐 主站
📖 已学 0

📌 进制转换

所属等级:GESP 3级 | 难度:★★☆ | 关键词:进制转换

📝 考纲要求

  • 掌握二进制、八进制、十进制、十六进制四种进制的概念与数码;
  • 掌握十进制转 N 进制的方法(除基取余法);
  • 掌握 N 进制转十进制的方法(按权展开求和);
  • 能在二进制、八进制、十六进制之间快速互转(每 3 位 / 每 4 位一组)。

📖 通俗讲解

💡 一句话理解 进制就是“数到几进一位”。我们平时用十进制(满 10 进 1);计算机只认二进制(满 2 进 1,只用 0 和 1);八进制满 8 进 1;十六进制满 16 进 1,超过 9 的数码用字母 A~F 表示(A=10, B=11, …, F=15)。

同一个数,用不同进制写出来只是“刻度”不同,代表的大小是一样的。比如十进制的 13,在二进制里写成 1101,在十六进制里写成 D。进制间的转换就像换一种“数数语言”,核心只有两个动作:十进制转其它进制用“除基取余”(不断除以基数,倒着读余数),其它进制转十进制用“按权展开”(各位数字 × 基数的位次幂后求和)。

🖼️ 图解 ①:四种进制数码对照表(0 ~ 15)

十进制   二进制   八进制   十六进制
   0       0000      0        0
   1       0001      1        1
   2       0010      2        2
   3       0011      3        3
   4       0100      4        4
   5       0101      5        5
   6       0110      6        6
   7       0111      7        7
   8       1000     10        8
   9       1001     11        9
  10       1010     12        A
  11       1011     13        B
  12       1100     14        C
  13       1101     15        D
  14       1110     16        E
  15       1111     17        F

🖼️ 图解 ②:两种转换法的竖式示意图

【十进制 → 二进制:除 2 取余,自下而上读余数】
   29 ÷ 2 = 14 余 1   ← 最低位
   14 ÷ 2 =  7 余 0
    7 ÷ 2 =  3 余 1
    3 ÷ 2 =  1 余 1
    1 ÷ 2 =  0 余 1   ← 最高位
   结果:29(十进制) = 11101(二进制)

【二进制 → 十进制:按权展开,自右向左位权 2^0,2^1,…】
   1 1 1 0 1
   ↑ ↑ ↑ ↑ ↑
  (2^4)(2^3)(2^2)(2^1)(2^0)
   = 1×16 + 1×8 + 1×4 + 0×2 + 1×1
   = 16 + 8 + 4 + 0 + 1 = 29

【原理同理可推广到八进制/十六进制:把“2”换成“8”或“16”即可】
🔑
记忆口诀:“十转 N,除基取余倒着读;N 转十,按权展开位位乘。二八十六互转换,三位一组二进制、四位一组二进制。”

🔵 核心必背重点

✅ 必背
  • 除基取余:十进制 ÷ 基数(2/8/16),余数倒序写;
  • 按权展开:第 i 位(从 0 开始)数字 × 基数i,再求和;
  • 二↔十六:每 4 位二进制对应 1 位十六进制(查对照表);
  • 二↔八:每 3 位二进制对应 1 位八进制(查对照表)。

🔴 考试拉分难点

⚠️ 难点
  • 二进制 ⇄ 十六进制分组补零:位数不够时要从最右(最低位)开始每 4 位一组,左边不足补 0。例如二进制 110101 分成 0011 0101 = 35(十六)。
  • 小数部分的乘基取整(了解):十进制小数转 N 进制用“乘基取整、顺序排列”,与整数部分的取余方向相反。
  • 字母大小写:十六进制数码 A~F 在写答案时大小写都可,但要会认,别把 B 当成 8、D 当成 0。

🟡 高频易错陷阱

🚫 扣分坑点
  • 除基取余时把余数正序写出(正确是倒序,从最后一次的余数作为最高位);
  • 按权展开时位权数错,把最右边的位当成 2¹ 而非 2⁰;
  • 二转十六分组时从左边开始分而非从右边开始,导致分组错位。

🧪 例题演练

例题 1(基础题):十进制转二进制 / 十六进制(除 2 取余法)

题目:输入一个非负整数 n,分别输出它的二进制与十六进制表示(字母用大写)。

C++
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

// 十进制 n 转 base 进制字符串(base 可为 2 或 16)
string toBase(int n, int base) {
    if (n == 0) return "0";
    string s;
    while (n > 0) {
        int r = n % base;          // 取余
        char c = (r < 10) ? (char)('0' + r) : (char)('A' + r - 10);
        s.push_back(c);            // 余数存起来(之后要倒序)
        n /= base;                 // 除基
    }
    reverse(s.begin(), s.end());   // 倒序得到正确顺序
    return s;
}

int main() {
    int n;
    cin >> n;
    cout << toBase(n, 2) << endl;   // 二进制
    cout << toBase(n, 16) << endl;  // 十六进制
    return 0;
}
输入 / 输出29 11101 1D

例题 2(模拟真题):二进制 / 十六进制转十进制(按权展开求和)

题目:输入一个二进制串(仅含 0/1),输出它对应的十进制整数。

C++
#include <iostream>
#include <string>
using namespace std;

// 把二进制串 s 按权展开转成十进制
int binToDec(const string& s) {
    int ans = 0;
    for (char ch : s) {
        ans = ans * 2 + (ch - '0');  // 每左移一位(×2)再加当前位
    }
    return ans;
}

int main() {
    string s;
    cin >> s;
    cout << binToDec(s) << endl;
    return 0;
}
输入 / 输出11101 29

💡 补充:十六进制串转十进制同理,把 ans * 2 改成 ans * 16,并把字符 A~F 映射成 10~15 即可(注意处理大写字母)。

🛡️ 避坑总结

  1. 十进制转 N 进制:除基取余,余数倒序;
  2. N 进制转十进制:按权展开,位权从 2⁰ 开始;
  3. 二进制 ⇄ 十六进制:每 4 位一组查表互转,左边不足补 0;
  4. 二进制 ⇄ 八进制:每 3 位一组查表互转,左边不足补 0;
  5. 写十六进制数码时 A~F 大写别写混,分组一定从最右开始。

💡 提示:按 ← → 方向键可在上一 / 下一知识点间快速翻页

GESP 3级 · 学习进度 0/0

📑 本页目录