GESP2026年6月认证C++三级( 第一部分选择题(1-7))精讲

发布时间:2026/7/1 10:53:56
GESP2026年6月认证C++三级( 第一部分选择题(1-7))精讲 第一部分 选择题 第1题《神秘数字王国——同一个二进制为什么能表示不同的数字》题目关于计算机的数据编码下面说法正确的是 。答案A。1、故事开始一天小杨来到了数字王国。1国王递给他一张纸100011012国王问小杨这是多少3小杨立刻回答1414旁边的大臣却说不对是-135小杨惊呆了怎么同一个数字还能有两个答案6国王笑了因为它戴了不同的帽子2、第一种帽子——无符号数如果它表示普通数字10001101₂计算128841 141所以1413、第二种帽子——原码如果最高位表示符号1表示负数。后面0001101就是13。所以表示-134、于是10001101 可以表示141 也可以表示-13这完全取决于我们怎么看它。5、知识点二进制数字的值真正决定意义的是无符号数原码反码补码不同解释得到不同数字。6、为什么B、C、D选项错1B说计算机最终以二进制、八进制、十六进制存储。这是错误的。真正存储只有二进制八进制、十六进制只是方便人看。2为什么C错C说Byte是最小单位实际上最小单位是bit位8 bit才等于1 Byte1字节3为什么D错D说1KB1000Byte计算机里1KB1024Byte7、⭐考试技巧遇见数据存储牢记计算机真正存储 只有二进制第一部分 第2题《硬盘商人的秘密——为什么1TB买回来变小了》答案B。1、故事1小杨买了一个1TB硬盘。回家插电脑。电脑却显示931GB2他气坏了老板骗我老板笑着说没有骗你只是我们算的方法不一样。2、两种计算方式1厂家1000进制所以1KB1000B 1MB1000KB 1GB1000MB 1TB1000GB2电脑1024进制所以1KB1024B因此1000000000000 ÷1024 ÷1024 ÷1024 ÷1024 ≈931GB所以电脑看到931GB左右3、知识点考试牢记厂家1000电脑1024第一部分 第3题《压缩小精灵——两个数字住进一间房》答案C。1、故事1有四个数字1 2 3 42每个数字只有4bit3于是压缩精灵说两个人住一间2、第一个字节0001 0010合起来00010010写成十六进制12H3、第二个字节0011 0100合起来00110100就是34H4、所以为12H 34H答案C5、知识点一个字节8bit一个十六进制4bit因此一个字节 刚好两个十六进制数字。6、易错点112H、34H 并不是 C 的语法而是一种计算机教材、电子电路、汇编语言中经常使用的十六进制表示方法。在 C 中我们不能写成12H而应该写成0x12 0x342以前很多教材、CPU手册、汇编语言都是这样写。例如FFH表示0xFF很多电子工程师今天仍然这么写。第一部分 第4题《补码魔法学院——谁说错了》答案B。这题主要考补码范围。1、故事1补码王国里住着8位士兵。他们只能表示256个数字范围-128 ~ 1272一定牢记最大 127 最小 -1282、A为什么对快速求补码从右向左 找到第一个1 左边全部取反这是经典技巧。3、C为什么对反码减法 可以变加法4、D为什么对反码0 00000000还有-0 11111111所以反码表示中0有两种表示方式。5、知识点补码唯一一个0反码有两个0第一部分 第5题《三把神秘钥匙——字符加密》答案A。1、故事1国王把秘密拆成三份第一份GESP第二份2026第三份| - ^ 只有三份合起来才能解密。2分别计算①G | 6ASCIIG7171|6 71仍然G②E 69 -2 67 C③S 83^0 83 S任何数^0 都不变④P 80 2 82 R3得到GCSR答案A2、知识点小窍门x ^ 0 x x | 0 x字符本质就是ASCII整数第一部分 第6题《位运算四兄弟》答案C错误。1、故事位运算学院有四位同学。第一位异或5 7 9 7 5两两抵消5^50 7^70最后9第二位交换a^b b^a a^b不用第三个变量。第三位左移1他说左移 一定乘22汉克老师说不对只有没有溢出才成立。3如果11111111左移高位丢了。结果完全变了。4因此左移≈乘2 不是永远成立。第四位取反公式~n-n-1这是经典公式。2、考试技巧左移没有溢出 ≈乘2千万不要说永远乘2第一部分 第7题《危险的字符仓库——数组越界》答案C。1、第一个选项A1程序char str[] GESP; int len1 sizeof(str); int len2 strlen(str);A说程序能够正确执行len1 与 len2 相等。到底对不对2我们先看看数组里面到底装了什么有的同学认为G E S P其实不是。字符串最后还有一个结束符\03真正存储的是下标01234内容GESP\0所以数组大小其实是54sizeof()sizeof 是什么可以把它理解成sizeof 是计算一个对象占用了多少个字节Byte的空间。整个数组有几个格子G E S P \0一共5所以sizeof(str)得到55strlen()strlen 是什么可以理解成数真正的字符。它遇到\0就停止。因此G E S P只有4所以strlen(str)得到4因此len15 len24当然不相等所以❌ A错误。第二个选项B1看程序char str1[4] GESP; char str2[4] {G,E,S,P};2B说这段程序能够正确执行。很多孩子第一眼觉得不是都放进去了吗其实不是3第一行为什么错看看GESP真正需要几个字符G E S P \0一共54但是char str1[4]只有4个位置。根本放不下。5因此编译错误或者初始化失败6第二行呢char str2[4]{ G, E, S, P };这里只有4个字符。没有\0所以它不是一个C风格字符串。只是字符数组它本身没有问题。7为什么整个B还是错因为第一句错了。整个程序当然不能正确执行。所以❌ B错误。第三个选项C1看程序char str2[4]{G,E,S,P}; strcpy(str2,HELLO,GESP); coutstr2endl;2题目说即使能够运行也存在覆盖数组以外内存空间的行为。这是正确答案。3为什么数组4格却要复制HELLO,GESP长度101还有结束符4显然11个字符。于是4格房子 硬塞11个人后面的人全部跑到别人家去了。5这叫数组越界Buffer Overflow这是 C 危险的问题之一。✅ C选项正确。第四个选项D1看程序char dest[4]{G,E,S,P}; char src[]HELLO; strcat(dest,src); coutdestendl;2D说不存在数组越界。真的吗当然不是3strcat 是什么strcat 的意思就是把后面的字符串接到前面字符串后面。4例如ABC DEF变成ABCDEF5但是dest只有4格6里面已经放满了G E S P更重要的是它连\0都没有7然后再拼接HELLO需要更多空间。所以继续越界。8因此❌ D错误。这里还有一个更大的坑很多同学认为char dest[4]{G,E,S,P};就是字符串。其实不是它只是字符数组因为没有\0所以strcat()连字符串结束在哪里都不知道。它会一直往后找直到碰巧找到一个‘\0’结果完全不可预测。这就是未定义行为Undefined Behavior比普通越界还危险选项是否正确为什么A❌sizeof()包括\0结果是5strlen()不包括\0结果是4因此两者不相等。B❌GESP实际需要5个字符包括结束符char str1[4]空间不足初始化就错误。C✅strcpy()复制的字符串远大于目标数组容量会覆盖数组外内存发生数组越界。D❌dest既没有\0空间又不足strcat()会产生未定义行为并发生数组越界。 知识总结这 7 道题几乎覆盖了 GESP 三级最重要的基础知识题号核心知识必须牢记1数据编码同一个二进制不同编码表示不同数字计算机只存二进制2存储单位厂家按1000进制计算机按1024进制3数据压缩1个十六进制数占4 bit2个十六进制数正好组成1 Byte4补码8位补码范围-128127补码只有一个05ASCII与位运算字符本质是整数掌握^0x、|0x等性质6位运算异或找唯一数、异或交换、~n-n-1、左移乘2需不溢出7字符数组strcpy、strcat使用时必须保证目标数组空间足够避免数组越界这7题虽然都是选择题但实际上对应的是三级考试中容易反复考查的基础概念。只有真正理解了这些故事背后的原理后面的判断题和编程题也会轻松很多。