GESP C++ 2 级 · 知识点

ASCII 编码

GESP C++ 二级要求知道字符在计算机中以编码形式保存,掌握常见 ASCII 码值,能完成字符与编码之间的换算,并分清字符 '0' 与整数 0。这类题既考记忆,也考用相邻关系推算。

对应知识域:ASCII 编码相关真题 4 套

本页为本站原创整理,例题与解析均由本站编写,不取自任何题库原题;考试范围以 CCF 官方公布为准,本平台不是 GESP 官方平台。

考纲要求

  • 知道 ASCII 用 7 位二进制为常用字符编号,共可表示 128 个字符,包括英文字母、数字、标点和控制字符。
  • 记住关键码值:数字字符 '0' 到 '9' 的码值连续递增,'0' 是 48;大写字母 'A' 是 65,小写字母 'a' 是 97。
  • 能根据相邻关系推出其他字符的码值,例如 'B' 是 66,'1' 是 49。
  • 理解字符 '0' 与整数 0 不是同一个值,前者在内存中保存的是编码 48。

典型题型

  • 给出字符,要求写出它的 ASCII 码值;或给出码值,要求写出对应字符。
  • 比较字符或字符串的大小,并说明比较依据。
  • 统计字符串中某类字符,或把字符数字转换成对应整数。

常见错误

  • 把字符 '0' 与数值 0 看成同一个东西。'0' 的编码是 48,直接参与数值运算得到的是 48 而不是 0。
  • 以为大写字母和小写字母的码值相邻。'Z' 是 90,'a' 是 97,中间还隔着若干符号。
  • 把字符串 "12" 直接当成整数 12 参与运算。字符串是两个字符,转成整数需要减去 '0' 或使用转换函数。
  • 忘记空格也有编码 32,比较字符串时把空格当成空字符串处理。

深入理解

128 个字符,7 位就够

ASCII 用 7 位二进制为字符编号,编号范围 0 到 127,共 128 个字符,包括 26 个大写字母、26 个小写字母、10 个数字、常用标点和一批控制字符。7 位而不是 8 位是常考点:8 位能表示 256 种,但 ASCII 只用了一半,第 8 位在早期的传输中常被用作校验位。

需要死记的只有三个锚点:'0' 是 48,'A' 是 65,'a' 是 97。其余全部靠「连续」推出来——数字字符从 '0' 开始连续递增,所以 '1' 是 49、'9' 是 57;大写字母从 'A' 到 'Z' 连续,是 65 到 90;小写字母从 'a' 到 'z' 是 97 到 122。

大小写之间差 32

同一字母的大写和小写码值正好相差 32,例如 'a' - 'A' = 97 - 65 = 32。这个常数有两个用途:一是推算未知字符的码值,已知 'C' 是 67,要求 'c',加 32 得 99;二是做大小写转换,c - 32 变大写,c + 32 变小写。

注意 32 不是随便来的:二进制里大写和小写只差第 6 位(从 0 开始数),翻转这一位就能切换大小写。题目若给出 'G' 求 'g',直接 71 + 32 = 103,不需要背表。

字符 '0' 和数字 0 完全不是一回事

'0' 是字符,内存里存的是 48;0 是整数,内存里存的就是 0。写 int x = '0'; 后 x 的值是 48,不是 0。反过来把数字字符转成数值,必须写 x - '0',直接用 (int)c 只会得到它的编码。

同理,cout << 'A' + 1 输出的是 66 而不是 B,因为加法把类型提升成了 int;要输出字符必须再转回来:cout << (char)('A' + 1)。这一组转换是二级最容易失分的地方,判断题里问「字符可以直接参与算术运算吗」,答案是能,但结果变成整数。

自编例题

由 'A' 推出其他字符

已知 'A' 的 ASCII 码是 65,求 'C' 和 'a' 的码值,并说明字符比较大小的依据。

cout << (int)'A' << ' ' << (int)'C' << ' ' << (int)'a' << endl;
// 输出:65 67 97

大写字母按字母顺序连续编码,'C' 比 'A' 后两位,码值是 67。'a' 的码值是 97,比 'A' 大 32,所以同一字母的小写形式码值更大。字符比较大小比较的是码值,'Z' 的 90 小于 'a' 的 97,说明按 ASCII 排序时全部大写字母都排在小写字母之前。把字符数字转成整数时,用 c - '0' 就能得到 0 到 9 的真实数值。

相关真题

这块内容在整条路线里的位置:GESP C++ 2 级备考路径。

READY TO START

开始练习

先做一套本级别测评,报告会指出哪些知识点需要重点补;再回到本页对照考纲要求逐条核对,把不确定的条目记下来集中练。

常见问题

ASCII 能表示中文吗?

标准 ASCII 只覆盖 128 个字符,不能表示中文。中文通常使用 Unicode 或 GBK 等编码,一个汉字往往占多个字节。

为什么 '0' 的码值是 48?

这是 ASCII 标准的规定。数字字符 '0' 到 '9' 连续编码为 48 到 57,记住 '0' 是 48 就能推出全部数字。

字符和整数能直接相加吗?

可以,字符会先转换成它的编码值再参与运算。例如 'A' + 1 得到 66,转回字符就是 'B',但要注意结果的范围。

本级别其他知识点

官方依据