Skip to content

第1章 GESP 三级考点总览 ​

🎯 本章学习目标 ​

学完本章(全书总览),你将能够:

  1. 整体把握 GESP 三级考试的 6 大知识模块及其权重分布
  2. 理解数据编码(原码、反码、补码)的核心思想与补码的优势
  3. 掌握二进制、八进制、十进制、十六进制之间的转换方法
  4. 熟练运用 6 种位运算符(&、|、~、^、<<、>>)进行手算
  5. 读懂算法的三种描述方式:自然语言、流程图、伪代码
  6. 掌握枚举法和模拟法两种基础算法思想的适用场景
  7. 理解一维数组的定义、访问、遍历与常见应用
  8. 掌握字符串的常用操作:大小写转换、搜索、分割、替换
  9. 建立三级各知识点之间的关联,形成完整的知识体系
  10. 制定适合自己的备考计划,明确各模块的复习优先级

🗺️ 本章知识图谱 ​

GESP 三级 C++
├── 底层数据表示
│   ├── 数据编码
│   │   ├── 原码(符号位+绝对值)
│   │   ├── 反码(负数数值位取反)
│   │   └── 补码(反码+1,计算机实际使用)
│   ├── 进制转换
│   │   ├── 二/八/十/十六进制
│   │   ├── R进制 → 十进制(按权展开)
│   │   ├── 十进制 → R进制(除基取余/乘基取整)
│   │   ├── 二进制↔八进制(三位一组)
│   │   └── 二进制↔十六进制(四位一组)
│   └── 位运算
│       ├── 按位与 &(取位、掩码、判奇偶)
│       ├── 按位或 |(置位)
│       ├── 按位非 ~(取反,~x=-x-1)
│       ├── 按位异或 ^(交换、加密、翻转)
│       ├── 左移 <<(×2ⁿ)
│       └── 右移 >>(÷2ⁿ,算术右移补符号位)
├── 算法思想与描述
│   ├── 算法五特征(有穷、确定、可行、输入、输出)
│   ├── 三种描述方式
│   │   ├── 自然语言(通俗但有二义性)
│   │   ├── 流程图(起止/处理/判断/输入输出框)
│   │   └── 伪代码(贴近程序,结构清晰)
│   ├── 枚举法(穷举:范围+条件)
│   └── 模拟法(按规则一步步演)
└── 数据结构与字符串
    ├── 一维数组
    │   ├── 定义与初始化
    │   ├── 下标访问(从0开始)
    │   ├── 越界访问(未定义行为)
    │   ├── 函数参数(退化为指针、传长度)
    │   └── 经典应用(统计、最值、查找、排序)
    └── 字符串
        ├── ASCII码与大小写转换
        ├── 搜索(find/rfind/npos)
        ├── 截取(substr)
        ├── 分割(手动split/stringstream)
        └── 替换(replace)

一、写在前面 ​

这是 GESP 三级备考 的 第 1 章,也是全书的总览章——六大考点全景总览。

CCF GESP(编程能力等级认证)三级,是考级体系中的第三个台阶。如果说一、二级解决的是"能不能写出程序",那么三级开始回答一个更深的问题:"数据在计算机内部到底长什么样?程序又是如何被描述和组织的?"

从二级到三级,是一次关键的跨越:

  • 🔽 向下:开始接触底层数据表示——二进制、原码反码补码、位运算,理解计算机"眼中"的世界
  • 🔼 向上:开始建立基础算法思维——枚举法、模拟法,学会用流程图和伪代码描述算法
  • 📦 向内:正式系统学习数据结构——一维数组,让数据"有家可归"
  • 🔤 向细:掌握字符串处理——搜索、分割、替换,编程题的基本功

💡 全书结构:本章是总览篇,后续第 2~7 章将逐模块深入拆解,每章独立成篇,覆盖知识点精讲、典型例题、编程实战与备考策略。


二、📊 六大考点全景总表 ​

GESP 三级考纲的 6 大知识模块一览全局:

序号📌 考点模块📖 一句话概括⭐ 考频星级
①数据编码原码、反码、补码——负数在计算机里的"身份证"⭐⭐⭐⭐⭐
②进制转换二/八/十/十六进制互转——计算机世界的"外语"⭐⭐⭐⭐⭐
③位运算&、|、~、^、<<、>>——直接操作二进制位的六大神器⭐⭐⭐⭐⭐
④算法与描述枚举法、模拟法 + 自然语言/流程图/伪代码描述⭐⭐⭐⭐
⑤数据结构一维数组⭐⭐⭐⭐⭐
⑥字符串及其函数大小写转换、搜索、分割、替换——编程题的日常⭐⭐⭐⭐

📌 考频星级说明:基于历年 GESP 三级真题统计分析,⭐越多表示出题频率越高、分值占比越大。①②③三个模块构成三级选择判断题的"底层三剑客",⑤⑥则是编程题的"主力输出"。


三、🔍 六大考点逐一拆解 ​

下面逐个说明每个考点 "考什么" 和 "怎么考"。


① 数据编码(原码、反码、补码) ​

🎯 考什么

  • 计算机内部采用二进制存储数据,数值分有符号数和无符号数
  • 原码:最高位为符号位(0 表示正,1 表示负),其余位表示数值大小
  • 反码:正数的反码 = 原码;负数的反码 = 符号位不变,其余位逐位取反
  • 补码:正数的补码 = 原码;负数的补码 = 反码 + 1
  • 补码的意义:让加减法统一为加法、零的表示唯一、表示范围多一个最小负数

先看一段代码,直观感受补码:

cpp
#include <iostream>
using namespace std;

int main() {
    // 以 8 位二进制为例(char 类型):
    //  +5 的原码/反码/补码:0000 0101
    //  -5 的原码:1000 0101(符号位为1)
    //  -5 的反码:1111 1010(符号位不变,数值位取反)
    //  -5 的补码:1111 1011(反码 + 1)——计算机中实际存储的形式
    char x = 5;    // 补码:0000 0101
    char y = -5;   // 补码:1111 1011
    cout << (int)(x + y) << endl;  // 输出 0:补码让加减法统一为加法
    return 0;
}

📝 怎么考

题型出题方式
单选题给定负数求原码/反码/补码、补码转十进制、判断表示范围
判断题"正数的原码、反码、补码都相同"(对!)、"0有两种补码表示"(错!补码中0唯一)
编程题不直接考概念,但理解补码是做对位运算题的前提

🔥 高频考点:n 位补码的表示范围是 -2^(n-1) ~ 2^(n-1)-1。8 位补码范围是 -128 ~ 127,其中 -128 的补码是 1000 0000,它没有对应的原码和反码——这是选择题的经典"陷阱选项"。

⚠️ **易错点:**求负数补码时,符号位不参与取反,只有数值位取反后再加 1。考试常给一个负数让你"求补码",千万不要把符号位也取反了!


② 进制转换 ​

🎯 考什么

  • 四种进制:二进制(B)、八进制(O)、十进制(D)、十六进制(H)
  • R 进制 → 十进制:按权展开求和(如 1011B = 1×2³ + 0×2² + 1×2¹ + 1×2⁰ = 11)
  • 十进制 → R 进制:除基取余,逆序排列(除2取余、除8取余、除16取余)
  • 二进制 ↔ 八进制:3 位二进制对应 1 位八进制(三位一体)
  • 二进制 ↔ 十六进制:4 位二进制对应 1 位十六进制(四位一体)
  • 代码中的进制表示:C++ 中八进制以 0 开头、十六进制以 0x 开头

进制表示与输出示例:

cpp
#include <iostream>
using namespace std;

int main() {
    int a = 017;    // 以 0 开头:八进制,等于十进制 15
    int b = 0x1F;   // 以 0x 开头:十六进制,等于十进制 31
    cout << a << " " << b << endl;  // 输出:15 31(默认按十进制输出)
    return 0;
}

💡 想把十进制数按八进制/十六进制输出,可用 C++ 的 dec/oct/hex 控制符(详见第 3 章《进制转换》)。

📝 怎么考

题型出题方式
单选题进制互转计算、判断哪个数最大/最小、代码中 0x/0 前缀的含义
判断题"二进制转十六进制需要4位一组"(对)、"十进制小数转二进制用除2取余"(整数部分除基取余,小数部分乘基取整)
编程题偶尔要求编程实现进制转换,或在模拟题中处理十六进制输入

🔥 **高频考点:**比较几个不同进制数的大小(如 1010B、17O、12D、0xA),先统一转成十进制再比较是最稳的做法。八进制数字只能出现 0~7,出现 8、9 立即判错。

⚠️ **易错点:**C++ 中 017 是八进制的 15,不是十进制的 17!这是代码阅读题的经典坑。另外注意:C++11 不支持 0b 二进制前缀(那是 C++14 才有的语法),考试写代码别用。


③ 位运算 ​

🎯 考什么

六大位运算符,直接对二进制位进行操作:

运算符名称规则口诀
&按位与两位都为 1,结果才为 1全 1 出 1
|按位或有一位为 1,结果就为 1有 1 出 1
~按位非0 变 1,1 变 0(单目运算)逐位取反
^按位异或两位不同为 1,相同为 0相异出 1
<<左移各位左移,低位补 0左移 n 位 ≈ ×2ⁿ
>>右移各位右移,高位补符号位右移 n 位 ≈ ÷2ⁿ

经典代码示例:

cpp
#include <iostream>
using namespace std;

int main() {
    int a = 5, b = 3;           // a = 0101, b = 0011
    cout << (a & b) << endl;    // 1  —— 0001:按位与
    cout << (a | b) << endl;    // 7  —— 0111:按位或
    cout << (a ^ b) << endl;    // 6  —— 0110:按位异或
    cout << (a << 1) << endl;   // 10 —— 左移1位,相当于 ×2
    cout << (a >> 1) << endl;   // 2  —— 右移1位,相当于 ÷2(取整)
    cout << ~a << endl;         // -6 —— 按位取反:~x = -x - 1

    // 异或的实用技巧:不用临时变量交换两个数
    int x = 5, y = 3;
    x = x ^ y;  // x = 6
    y = x ^ y;  // y = 5
    x = x ^ y;  // x = 3,交换完成
    cout << x << " " << y << endl;  // 3 5
    return 0;
}

📝 怎么考

题型出题方式
单选题位运算表达式求值、判断奇偶(x & 1)、位运算交换变量、移位后的值
判断题"左移一位相当于乘2"(不溢出时成立)、"异或满足交换律"(对)
编程题用位运算解决问题(统计二进制中1的个数、位运算模拟集合等)

🔥 高频考点:~ 按位取反的结果是 ~x = -x - 1(如 ~5 = -6),几乎每次考试都有人在这里丢分。原理是补码:取反后恰好等于相反数减一。

⚠️ 易错点:①位运算的优先级低于比较运算符,写 if (a & b == 0) 会出错,必须加括号 (a & b) == 0;②对负数右移是算术右移(高位补符号位1),结果仍是负数;③左移可能溢出,溢出后"×2"结论失效。


④ 算法与描述 ​

🎯 考什么

两大基础算法思想:

  • 枚举法(穷举法):把问题的所有可能情况一一列举、逐一检验,思路简单但要注意枚举范围和判定条件
  • 模拟法:严格按照题目描述的规则,一步步"照做",关键是把规则准确翻译成代码

三种算法描述方式:

描述方式特点考试看点
📝 自然语言用中文/英文句子描述,通俗易懂但易有歧义理解算法步骤
📊 流程图用标准图形符号描述,直观清晰认符号、看分支、数循环
💻 伪代码介于自然语言和代码之间,结构严谨阅读理解、填空补全

流程图的常用符号要认清:椭圆=开始/结束框,矩形=处理框,菱形=判断框,平行四边形=输入/输出框,箭头=流程线。

枚举法典型套路示例:

cpp
#include <iostream>
using namespace std;

int main() {
    // 枚举法:找出 10~99 中个位与十位之积为 12 的两位数
    for (int n = 10; n <= 99; n++) {   // 枚举所有可能的两位数
        int gw = n % 10;               // 个位
        int sw = n / 10;               // 十位
        if (gw * sw == 12) {           // 判定条件
            cout << n << " ";          // 输出:26 34 43 62
        }
    }
    return 0;
}

📝 怎么考

题型出题方式
单选题读流程图判断输出结果、伪代码填空、枚举范围是否正确
判断题判断流程图符号用法、枚举是否会遗漏/重复
编程题两道编程题几乎必有一道是枚举或模拟(如日期计算、报数模拟、规则推演)

🔥 高频考点:流程图阅读题是三级的特色题型——给定流程图让你判断输出或循环次数。做这类题要拿笔在纸上跟着流程走一遍,特别注意菱形判断框的"是/否"分支走向和循环变量的更新时机。

⚠️ 易错点:枚举法最容易犯的错是边界错误——循环从几开始、到几结束(<= 还是 <)。模拟法最容易犯的错是漏掉规则细节,题目多读两遍,把每条规则圈出来再动手。


⑤ 数据结构(数组) ​

🎯 考什么

  • 一维数组的定义、初始化、下标访问(下标从 0 开始)
  • 数组的遍历、求最值、计数、查找
  • ⚠️ 考纲明确:不包括变长数组(VLA),即数组长度必须是常量 代码示例:
cpp
#include <iostream>
using namespace std;

int main() {
    int a[5] = {3, 1, 4, 1, 5};   // 一维数组:长度必须是常量
    int mx = a[0];                 // 假设第一个元素最大
    for (int i = 1; i < 5; i++) {  // 遍历数组(下标 0~4)
        if (a[i] > mx) mx = a[i];  // 更新最大值
    }
    cout << mx << endl;            // 输出:5
    return 0;
}

📝 怎么考

题型出题方式
单选题数组下标计算、数组初始化结果
判断题"数组下标从1开始"(错,从0开始)
编程题数组是所有编程题的载体:统计频次、查找、排序预处理等

⚠️ 易错点:①C++ 数组越界访问不报错(读到垃圾值),是编程题"玄学错误"的头号元凶;②数组初始化 int a[5] = {0}; 会把全部元素清零,但 int a[5]; 不初始化则是随机值;


⑥ 字符串及其函数 ​

🎯 考什么

  • 字符与 ASCII 码:'A'=65、'a'=97、'0'=48,大小写字母相差 32
  • 大小写转换、字符串搜索(查找)、分割、替换、截取子串
  • C++ string 类

常用函数速查:

功能C++(string)
求长度s.length() / s.size()
转大写/小写toupper(c) / tolower(c)
查找子串s.find("ab")(找不到返回 string::npos)
string::npos 是一个静态常量,表示“未找到”,其值通常为 size_t 类型的最大值。
截取子串s.substr(pos, len)
分割需手动实现或配合 stringstream
替换s.replace(pos, len, str)
拼接s1 + s2

代码示例:

cpp
#include <iostream>
#include <string>
using namespace std;

int main() {
    string s = "Hello GESP";
    cout << s.length() << endl;          // 10:字符个数(含空格)
    cout << (char)tolower(s[0]) << endl; // h:字符转小写
    cout << s.find("GESP") << endl;      // 6:返回子串起始下标
    cout << s.substr(0, 5) << endl;      // Hello:从下标0开始取5个字符
    return 0;
}

📝 怎么考

题型出题方式
单选题ASCII 码计算、函数返回值(find 找不到时返回什么)、字符串切片结果
判断题"字符串可以直接用 == 比较内容"(C++ 的 string 可以直接比较)、"find 找不到返回0"(错!)
编程题统计字符出现次数、单词分割处理、大小写转换、回文判断等

🔥 **高频考点:**ASCII 码推算几乎逢考必出——记住三个锚点 'A'=65、'a'=97、'0'=48,任意字符的码值都能推算。同类题型:大写转小写 = 码值 +32(或 | 32),小写转大写 = 码值 -32(或 & ~32)。

⚠️ 易错点:①C++ 的 find 找不到子串返回 string::npos(一个很大的数),不是 -1;②substr(pos, len) 第二个参数是长度不是结束位置;


四、📝 实战练习 ​

以下 8 道题覆盖三级所有模块,用于检测你对各知识点的初步掌握程度。建议先独立完成,再对照解析查漏补缺。

练习题 1(单选题) ​

题目: 十进制数 -19 的 8 位二进制补码是( )

A. 1001 0011  B. 1110 1101  C. 1110 1100  D. 0110 1101

🔑 点击查看答案与解析

答案: B

解析:

19 = 16 + 2 + 1 = 0001 0011
-19 原码:1001 0011
-19 反码:1110 1100(数值位取反)
-19 补码:1110 1101(反码 + 1)
  • A 是原码,C 是反码,都是干扰项;D 符号位为 0 是正数,直接排除。

选 B。


练习题 2(单选题) ​

题目: 下列四个数中,最小的是( )

A. (1101)₂  B. (16)₈  C. 14  D. (C)₁₆

🔑 点击查看答案与解析

答案: D

解析: 统一转十进制比较:

  • A:(1101)₂ = 8+4+1 = 13
  • B:(16)₈ = 1×8 + 6 = 14
  • C:14
  • D:(C)₁₆ = 12

D 的值 12 最小。

教训:做进制比较题一定要全部转成十进制再比,千万不要凭感觉!


练习题 3(单选题) ​

题目: 表达式 8 | 5 的值是( )

A. 3  B. 13  C. 0  D. 12

🔑 点击查看答案与解析

答案: B

解析: 按位或运算,先转二进制再逐位运算:

  8 = 1000
  5 = 0101
  ---------
|     1101 = 13

按位或的规则是"有 1 出 1",所以结果的每一位只要两个数中有一个是 1,结果就是 1。

1101 = 8+4+1 = 13,选 B。


练习题 4(判断题) ​

题目: 判断下列说法是否正确,正确打"√",错误打"×"。

(1) 算法必须有至少一个输入。( ) (2) 流程图中,菱形表示判断框,有一个入口和两个出口。( ) (3) 自然语言描述算法的优点是严谨、没有二义性。( ) (4) 枚举法的核心是确定枚举范围和判定条件。( ) (5) 模拟法需要把题目规则准确翻译成代码。( )

🔑 点击查看答案与解析

答案: (1) × (2) √ (3) × (4) √ (5) √

解析:

  • (1) ×:算法可以有 0 个输入(如打印固定内容的程序),但输出至少 1 个。
  • (2) √:菱形是判断框,一进两出(是/否两个分支)。
  • (3) ×:自然语言通俗易懂但有二义性,严谨无二义性说反了。
  • (4) √:枚举法两步走:确定范围 + 逐一检验。
  • (5) √:模拟法的核心就是"照规则做",规则理解错了全盘皆输。

练习题 5(程序阅读题) ​

题目: 阅读以下 C++ 程序,输出结果是( )

cpp
int a[5] = {2, 5, 1, 5, 3};
int mx = a[0], pos = 0;
for (int i = 1; i < 5; i++) {
    if (a[i] > mx) {
        mx = a[i];
        pos = i;
    }
}
cout << pos;

A. 5  B. 1  C. 2  D. 4

🔑 点击查看答案与解析

答案: B

解析: 程序的功能是找数组中最大值的下标(第一个出现的最大值)。

逐轮追踪:

  • 初始:mx=2, pos=0
  • i=1: a[1]=5 > 2 → mx=5, pos=1
  • i=2: a[2]=1 < 5 → 不变
  • i=3: a[3]=5 = 5 → 不更新(注意条件是 > 不是 >=)
  • i=4: a[4]=3 < 5 → 不变

最终 pos = 1(第一个最大值 5 在下标 1 处),选 B。

易错提醒:题目问的是下标 pos,不是最大值 mx。如果粗心选了 A(5)就掉坑里了。


练习题 6(单选题) ​

题目: 已知 'A' 的 ASCII 码为 65,以下表达式的值为 'D' 的是( )

A. 'A' + 3  B. 'a' + 3  C. 'A' + '3'  D. 68

🔑 点击查看答案与解析

答案: A

解析:

  • A:'A' + 3 = 65 + 3 = 68,68 对应的字符是 'D' ✅
  • B:'a' + 3 = 97 + 3 = 100,对应 'd'(小写)❌
  • C:'A' + '3' = 65 + 51 = 116,对应 't'(注意 '3' 是字符,ASCII 码为 51,不是数字 3)❌
  • D:68 是整数 68,不是字符 'D'(需要强转 (char)68 才是字符)❌

选 A。


练习题 7(编程题) ​

题目: 输出所有满足条件的两位数:个位与十位数字之和为 9,且个位是偶数。

输出样例:

18 36 54 72 90
🔑 点击查看答案与解析

参考代码:

cpp
#include <iostream>
using namespace std;

int main() {
    for (int n = 10; n <= 99; n++) {
        int ge = n % 10;         // 个位
        int shi = n / 10;        // 十位
        if (ge + shi == 9        // 个位+十位 = 9
            && ge % 2 == 0) {    // 个位是偶数
            cout << n << " ";
        }
    }
    cout << endl;
    return 0;
}

解析: 枚举所有两位数(10~99),对每个数拆出个位和十位,检查两个条件:

  1. 个位 + 十位 = 9
  2. 个位是偶数(ge % 2 == 0)

验证:18(1+8=9,8偶) ✓、36(3+6=9,6偶) ✓、54(5+4=9,4偶) ✓、72(7+2=9,2偶) ✓、90(9+0=9,0偶) ✓

💡 优化思路:也可以只枚举十位(1~9),个位 = 9 - 十位,然后判断个位是否为偶数。这样只需循环 9 次而不是 90 次,但对两位数来说差别不大。


练习题 8(程序阅读题) ​

题目: 阅读流程图,输入 a=12, b=8,输出结果是( )

      ( 开始 )
         |
     / 输入 a, b /
         |
    [ r ← a % b ]
         |
   +---> < r == 0 ? >--是---> / 输出 b / --->(结束)
   |        |否
   |    [ a ← b ]
   |    [ b ← r ]
   |    [ r ← a % b ]
   +--------+

A. 2  B. 4  C. 6  D. 8

🔑 点击查看答案与解析

答案: B

解析: 这是**辗转相除法(欧几里得算法)**求最大公约数的流程图。

逐步追踪:

  • 初始:a=12, b=8
  • 第1轮:r = 12 % 8 = 4,r ≠ 0 → a=8, b=4, r=8%4=0
  • 第2轮判断:r == 0 → 是,输出 b = 4

12 和 8 的最大公约数确实是 4 ✓

选 B。


五、📊 考点总结表 ​

模块重要程度出题形式分值占比易错点
数据编码(原反补码)⭐⭐⭐⭐⭐选择/判断~10分符号位参与取反;-128无原码;补码范围记错
进制转换⭐⭐⭐⭐⭐选择/判断/计算~10分分组方向搞反;A~F对应值记混;小数位权错
位运算⭐⭐⭐⭐⭐选择/程序阅读~10分~x记成-x;优先级陷阱(&低于==);负数右移
算法与描述⭐⭐⭐⭐流程图阅读/选择~10分算法输入可以是0个;判断框出入口数;流程图循环次数
一维数组⭐⭐⭐⭐⭐编程/程序阅读~15分下标从0开始;越界未定义;VLA非法
字符串函数⭐⭐⭐⭐编程/程序阅读~15分find返回npos不是-1;substr是长度不是终点;cin与getline混写

⭐ 必背速记卡 ​

┌──────────────────────────────────────────────────────┐
│              ⭐ GESP 三级必背速记卡                     │
├──────────────────────────────────────────────────────┤
│  1. 负数补码 = 反码 + 1;正数三码合一                  │
│  2. n位补码范围:-2^(n-1) ~ 2^(n-1)-1(8位:-128~127)│
│  3. 进制转换:R→十按权展开;十→R除基取余倒排           │
│  4. 八三、十六四:八进制1位=二进制3位,十六1位=4位     │
│  5. 按位取反公式:~x = -x - 1(~5 = -6)              │
│  6. 位运算优先级低于比较,x&1==0 要写成 (x&1)==0     │
│  7. 异或自反性:a^b^b = a;可用于交换变量              │
│  8. 左移n位=×2ⁿ;右移n位=÷2ⁿ(负数算术右移向下取整)   │
│  9. 算法五特征:有穷、确定、可行、输入(0+)、输出(1+)    │
│ 10. 流程图:椭圆起止、矩形处理、菱形判断、平行四边形IO  │
│ 11. 数组下标从0开始,长度n范围0~n-1,越界未定义        │
│ 12. 'A'=65 'a'=97 '0'=48,大小写差32                  │
│ 13. string找不到子串返回 string::npos                  │
│ 14. substr(起点, 长度);不是(起点, 终点)              │
│ 15. 枚举法:范围+条件;模拟法:状态更新+边界           │
└──────────────────────────────────────────────────────┘

六、📈 备考建议:如何高效攻克三级? ​

1️⃣ 先理解"底层",再动手写码 ​

三级最大的特点是概念题考底层:补码怎么算、位运算结果是多少、进制怎么转。这些知识点光背没用,一定要亲手在草稿纸上算:给一个负数写出三种码、把一个十进制数转成四种进制、手算每个位运算表达式。纸上演算 10 道,胜过看答案 100 遍。

2️⃣ 选择/判断靠概念,编程题靠细心 ​

  • 选择 + 判断(50分):数据编码、进制、位运算三章是"概念输出主力",流程图题要会"跟着走"
  • 编程题(50分):三级编程题以枚举、模拟、数组/字符串处理为主,算法不难,拼的是边界处理和细心程度

3️⃣ 真题是最好的复习资料 ​

GESP 三级历年真题是最好的备考材料。建议按以下顺序刷题:

  1. 先按模块分类刷 → 找到自己的薄弱点(尤其补码和位运算)
  2. 再按套卷限时练 → 训练时间分配能力
  3. 最后复盘错题 → 查漏补缺

百炼成钢,融会贯通