GESP 客观题评测系统

2026-06-Level-3

2026-06-Level-3

试卷解析总览,可直接查看每题答案与解析。

单选题

1 题(单选题2 分)

关于计算机的数据编码,下面说法正确的是()。

A.
机器数 1000 1101B 的真值可能是 -13(如果它是原码)或 141(如果它是无符号数)等数,这取决于我们如何解释它。
B.
计算机中,所有数据最终都以二进制、八进制、十六进制的形式存储和运算。
C.
字节(Byte)是计算机中最小的数据单位。位(bit)是计算机中最小的存储单位。
D.
计算机中,1k 字节是 1000 字节的意思。

正确答案A

解析详情

【答案】A

【考点】机器数的编码解释

【解析】 同一位串的真值取决于编码方式。1000 1101B 按 8 位原码解释时符号位为 1、数值为 13,真值是 -13;按无符号数解释时为 128+8+4+1=141。

【易错点】 不要脱离原码、补码或无符号数等编码方式直接确定机器数的真值。

2 题(单选题2 分)

计算机厂商为了计算方便,一般采用 1000 进制。如果我们买的厂商标注的是 1 TB 的硬盘,它实际的存储容量是()。

A.
1000×1000×1000×1000÷1024÷1024÷1024b=931Gb1000 \times 1000 \times 1000 \times 1000 \div 1024 \div 1024 \div 1024b = 931Gb
B.
1000×1000×1000×1000÷1024÷1024÷1024B=931GB1000 \times 1000 \times 1000 \times 1000 \div 1024 \div 1024 \div 1024B = 931GB
C.
1024×1024×1024×1024÷1000÷1000÷1024B=1049GB1024 \times 1024 \times 1024 \times 1024 \div 1000 \div 1000 \div 1024B = 1049GB
D.
1000×1024×1024×1024÷1024÷1024÷1024b=977Gb1000 \times 1024 \times 1024 \times 1024 \div 1024 \div 1024 \div 1024b = 977Gb

正确答案B

解析详情

【答案】B

【考点】存储容量单位换算

【解析】 厂商标注的 1 TB 是 10^12 B。按计算机常用的 1 GB=1024^3 B 换算,10^12÷1024^3≈931 GB,单位仍是字节 B,因此选 B。

【易错点】 注意区分 bit(b)与 Byte(B),并区分 1000 与 1024 两套换算标准。

3 题(单选题2 分)

低4位、高4位压缩技术,适用于数据仅使用字节的一部分(如仅用低4位)的场景。字节结构:一个字节为8位,分为高4位(高位)和低4位(低位)。当数据是十六进制数(0~15,即0x0到0xF),每个值仅需4位表示,高4位全为0。将两个相邻的4位值合并为一个字节。四个数据0x1、0x2、0x3、0x4采用上述压缩技术压缩以后是()。

A.
12D、34D
B.
12Q、34Q
C.
12H、34H
D.
00010011B、00110101B

正确答案C

解析详情

【答案】C

【考点】半字节压缩与十六进制

【解析】 每个数据只占 4 位,将 0x1、0x2 分别放入一个字节的高、低 4 位,得到 0x12;同理 0x3、0x4 得到 0x34,即 12H、34H。

【易错点】 合并的是两个 4 位值,不是把十进制字符“1”和“2”拼接后按十进制解释。

4 题(单选题2 分)

关于计算机编码中反码和补码,下面说法错误的是()。

A.
负数的补码,一个快速方法是从右往左扫描正数的二进制形式,遇到第一个 1 之后,左边的所有位都取反。
B.
对于一个 n 位的二进制数:最大表示范围: [-(2^{n-1}) - 1, +(2^{n-1} - 1)] 。
C.
反码减法可以统一为加法。符号位可以直接参与运算。
D.
反码表示中,0 的表示不唯一:0000 0000B 和 1111 1111B。

正确答案B

解析详情

【答案】B

【考点】反码的表示范围

【解析】 n 位反码有正零和负零两种 0,其真值范围是 [-(2^(n-1)-1), 2^(n-1)-1]。B 将下界写成 -2^(n-1)-1,括号位置错误,因此该说法错误。

【易错点】 负端点是“负的 2^(n-1)-1”,不是“负的 2^(n-1) 再减 1”。

5 题(单选题2 分)

一种加密方式是字符数组与密钥 KEY、运算方式分开传输,比如字符数组 char text[4] = {'G', 'E', 'S', 'P'}; 由一种传输方式发送,密钥 KEY = 2026 通过另一种发送方式发送,运算方式 char function[4] = {'|', '-', '^', '+'}; 又是另一种发送方式发送。三种数据都到达目的地以后,分别进行例如 'G' | 6、'E' - 2、'S' ^ 0、'P' + 2 等计算,来得到相应的真实内容,上述 GESP 通过这种加密方式,加密以后最终的内容是()。

A.
GCSR
B.
RSCG
C.
GCSA
D.
BCSR

正确答案A

解析详情

【答案】A

【考点】字符编码与位运算

【解析】 按 KEY 的各位 2、0、2、6 逆序参与题示运算:'G'|6 仍为 'G','E'-2='C','S'^0='S','P'+2='R'。依次得到 GCSR。

【易错点】 字符参与运算时使用其编码值,并要按题目给出的密钥位与运算符顺序计算。

6 题(单选题2 分)

关于位运算,下列说法错误的是()。

A.
找唯一数:数组中唯一出现一次的数,其余出现两次,全部异或结果即为该数。例如:数组 [5, 7, 9, 7, 5] (唯一数是 9)。
B.
交换两个数:a ^ = b;b ^ = a;a ^ = b;(无需临时变量)。
C.
将二进制位整体左移 n 位,高位溢出舍弃,低位补 0;等价于 num 乘以 2^n。
D.
对每一个二进制位取反,包括符号位,简单运算规则是 ~n = -n - 1。

正确答案C

解析详情

【答案】C

【考点】左移运算与溢出

【解析】 只有在左移位数合法且结果未溢出可表示范围时,num<<n 才可视为 num×2^n。C 一面说明高位可能溢出舍弃,一面又无条件声称二者等价,结论不成立。

【易错点】 使用左移代替乘法时不能忽略数据类型范围和溢出条件。

7 题(单选题2 分)

关于字符串和字符数组,下列说法正确的是()。

A.
char str[] = "GESP";
int len1 = sizeof(str);
int len2 = strlen(str);
上面程序能够正确执行,len1 与 len2 相等。
B.
char str1[4] = "GESP";
char str2[4] = {'G', 'E', 'S', 'P'};
这段程序将能够正确执行。
C.
char str2[4] = {'G', 'E', 'S', 'P'};
strcpy(str2, "HELLO,GESP");
cout << str2 << endl;
这段程序即使能够运行,但是存在覆盖数组以外的内存空间的行为,可能会引起严重错误。
D.
char dest[4] = {'G', 'E', 'S', 'P'};
char src[] = "HELLO";
strcat(dest, src);
cout << dest << endl;
这段程序能够正确执行,不存在数组越界行为。

正确答案C

解析详情

【答案】C

【考点】字符数组边界与字符串结束符

【解析】 str2 只有 4 个字节,且初值中没有 '\0'。strcpy 复制 "HELLO,GESP" 还需写入末尾 '\0',远超数组容量,会覆盖数组外内存并产生未定义行为。

【易错点】 字符数组容量必须同时容纳全部字符和结尾的 '\0'。

8 题(单选题2 分)

计算机中的 2 KB 等于多少 bit()。

A.
16384
B.
20000
C.
2000
D.
2048

正确答案A

解析详情

【答案】A

【考点】字节与位的换算

【解析】 1 KB=1024 B,1 B=8 bit,所以 2 KB=2×1024×8=16384 bit。

【易错点】 不要把 KB 直接换成 bit,必须先按 1024 换成字节,再乘 8。

9 题(单选题2 分)

在 C++ 中,对于 32 位有符号整数 int 类型数据 n,关于按位取反运算符 ~,下列说法正确的是()。

A.
~6 的结果是 5。
B.
按位取反满足公式 ~n = -n - 1。
C.
~0 的结果是 1。
D.
~(-2) 的结果是 -1。

正确答案B

解析详情

【答案】B

【考点】补码与按位取反

【解析】 32 位有符号整数通常采用补码,n 与 ~n 的每一位互补,两者之和为全 1,即 -1,因此 ~n=-n-1。例如 ~6=-7、~0=-1。

【易错点】 按位取反会翻转全部 32 位,不是只翻转数值中显示出来的几位。

10 题(单选题2 分)

关于计算机中的二进制编码表示,下列说法错误的是()。

A.
原码是最直观的一种有符号数表示方法。最高位(最左边的位)为符号位:0 表示正数,1 表示负数,其余位为数值位(真值的绝对值)。
B.
补码完美解决了原码和反码的缺陷,是现代计算机中表示有符号整数的标准方式。正数的补码与其原码、反码相同;负数的补码是将其对应正数的原码按位取反(得到反码),然后加 1。
C.
计算补码的一个更快的技巧:从右往左扫描正数的二进制形式,遇到第一个 1 之后,左边的所有位都取反。
D.
对于一个 n 位的二进制数,补码最大表示范围为 [-2^{n-1}, +2^{n-1}] 。

正确答案D

解析详情

【答案】D

【考点】补码的表示范围

【解析】 n 位补码共有 2^n 种编码,表示范围是 [-2^(n-1), 2^(n-1)-1]。正数最大值要减 1,所以 D 中的上界 +2^(n-1) 错误。

【易错点】 补码的正负范围不对称,最小负数的绝对值比最大正数大 1。

11 题(单选题2 分)

下面选项中提到的变量都是正整数,关于位运算,下面说法错误的是()。

A.
num & 1,结果为 1 则奇数,0 则偶数(仅看最低位)。
B.
num & 0xFF 保留低 8 位。
C.
num & b 的结果一定小于等于 num。
D.
若 num 左移导致高位溢出(如超过整型范围),结果符合乘法规律。

正确答案D

解析详情

【答案】D

【考点】位运算与整数溢出

【解析】 num 左移只有在结果仍处于类型可表示范围时才符合乘以 2 的规律。高位溢出后有效位已丢失;对有符号正整数,超出可表示范围还会导致未定义行为,因此 D 错误。

【易错点】 不能把“左移一位等于乘 2”当作不受整数范围限制的恒等式。

12 题(单选题2 分)

a=7, b=3, c=14, d=15, e=8,对于运算表达式 !a << b & c ^ d | e 的结果是()。

A.
0
B.
15
C.
7
D.
14

正确答案B

解析详情

【答案】B

【考点】位运算符优先级

【解析】 按优先级依次计算:!a=0,0<<b=0,0&c=0,0^d=15,15|e=15。因此整个表达式的结果为 15。

【易错点】 不要按从左到右机械计算,逻辑非、移位、按位与、异或、按位或的优先级依次降低。

13 题(单选题2 分)

关于 string 的成员函数,下面说法错误的是()。

A.
size():返回字符串长度(字符个数,不含 '0')。
B.
length() 与 size() 功能完全一致,返回字符串长度。
C.
empty():判断字符串是否为空(非空返回 true,空返回 false)。
D.
s.append(s2, 0, 3);从 s2 下标 0 开始,截取 3 个字符。

正确答案C

解析详情

【答案】C

【考点】string 成员函数

【解析】 string::empty() 在字符串长度为 0 时返回 true,非空时返回 false。C 将返回条件完全写反,因此是错误说法。

【易错点】 empty() 判断的是“是否为空”,返回 true 就表示没有字符。

14 题(单选题2 分)

以下数组定义,符合 C++ 语法的是()。

A.
int [10] a;
B.
int b['&'];
C.
int c[*];
D.
double d[10.0];

正确答案B

解析详情

【答案】B

【考点】C++ 数组长度表达式

【解析】 字符常量 `'&'` 是整型常量表达式,其字符编码值为正整数,可以作为数组长度,因此 `int b['&'];` 符合语法。A 的标识符位置错误,C 的 `*` 不是合法长度,D 使用了浮点常量作为数组长度。

【易错点】 数组长度需要是合法的整型常量表达式;字符常量可隐式转换为整数,浮点常量不可以直接作为长度。

15 题(单选题2 分)

现在有一个数,请你分别判断它们是否可能是二进制、八进制、十进制、十六进制。例如,6AFF 就只可能是十六进制,而 1011 则是四种进制皆有可能。输入 N(保证 1 \leq N \leq 1000 ),表示有 N 个数让你进行判断,接下来输入 N 个字符串(保证所有字符串长度不超过 10),判断可能是四个进制当中的哪个进制数。输出 N 行,每行 4 个数,用空格隔开,分别表示给定的字符串是否可能表示一个二进制数、八进制数、十进制数、十六进制数。使用 1 表示可能,使用 0 表示不可能。下面程序横线处可以满足这个要求的是()。

#include <iostream>
using namespace std;
int main() {
    int n = 0;
    cin >> n;
    for (int i = 0; i < n; i++) {
        char str[11];
        cin >> str;
        char max = '0';
        for (int j = 0; str[j] != '\0'; j++)
            if (str[j] > max)
                max = str[j];
        ___________________________________________
    }
    return 0;
}
A.
cout << (max >= '1') << " " << (max >= '7') << " " << (max >= '9') << " " << (max >= 'F') << endl;
B.
cout << (max <= '1') << " " << (max <= '7') << " " << (max <= '9') << " " << (max <= 'F') << endl;
C.
cout << (max = '1') << " " << (max = '7') << " " << (max = '9') << " " << (max = 'F') << endl;
D.
cout << (max < '1') << " " << (max < '7') << " " << (max < '9') << " " << (max < 'F') << endl;

正确答案B

解析详情

【答案】B

【考点】字符比较与进制判定

【解析】 程序已求出字符串中的最大字符 max。若 max<='1'、<='7'、<='9'、<='F',则所有字符分别可能属于二、八、十、十六进制的合法字符范围,因此四个比较应使用 <=。

【易错点】 要判断所有位是否合法,应比较最大字符是否不超过该进制允许的最大字符。

判断题

1 题(判断题2 分)

反码运算时,产生的进位需要循环进位,即最高位产生的进位要加回到结果的最低位。

正确答案正确

解析详情

【答案】正确

【考点】反码加法的循环进位

【解析】 反码加法采用循环进位:若最高位产生进位,不能直接丢弃,而要把该进位加回结果的最低位。

【易错点】 不要把反码加法的最高位进位按普通定长二进制加法直接舍弃。

2 题(判断题2 分)

-11 的补码的一种计算方式是从右往左扫描正数的二进制形式,遇到第一个 1 之后,左边的所有位都取反。

正确答案正确

解析详情

【答案】正确

【考点】负数补码的快速求法

【解析】 固定字长下,正数 11 的二进制从右向左保留到第一个 1(含该位),再将其左侧各位取反,所得结果等价于按位取反后加 1,即 -11 的补码。

【易错点】 第一个 1 本身及其右侧位保持不变,只取反它左边的位。

3 题(判断题2 分)

一个8位的二进制数补码,最大的表示范围是从 -127 到 +127 。

正确答案错误

解析详情

【答案】错误

【考点】补码的表示范围

【解析】 8 位补码的范围是 -2^7 到 2^7-1,即 -128 到 127,不是 -127 到 127。

【易错点】 补码只有一种 0,因此负数一侧能比正数一侧多表示一个值。

4 题(判断题2 分)

判断某个数是否是质数,枚举范围可适当缩小(遍历到 \sqrt{i} 而非 i),提升效率。

正确答案正确

解析详情

【答案】正确

【考点】质数判定的枚举上界

【解析】 若合数 i=a×b,则 a、b 中至少有一个不大于 √i。因此枚举因子到 √i 仍能发现所有合数,并把试除次数明显减少。

【易错点】 循环上界应包含 √i 对应的因子,可用 j*j<=i 判断。

5 题(判断题2 分)

如果 a 为 int 类型的变量,且表达式 (a \& 1) == 1 的值为 true,则说明 a 是奇数。

正确答案正确

解析详情

【答案】正确

【考点】按位与判断奇偶

【解析】 整数 a 的最低二进制位为 1 当且仅当 a 是奇数;a&1 只保留最低位,所以 (a&1)==1 成立即可判定 a 为奇数。

【易错点】 位运算表达式应加括号,避免与比较运算混淆优先级。

6 题(判断题2 分)

十六进制数 CCF 对应的二进制数、八进制数、十进制数分别是:110011001111、6317、3269。

正确答案错误

解析详情

【答案】错误

【考点】十六进制转换

【解析】 CCF(H)=12×16^2+12×16+15=3279,二进制 110011001111 和八进制 6317 均正确,但题目给出的十进制 3269 错误。

【易错点】 逐项核对多种进制结果,不能因其中两项正确就判定整句话正确。

7 题(判断题2 分)

下列程序如果能够正确执行,那么输出的结果是 GESP。

int main() {
    string name = "GESP";
    cout << name[false] << name[true] << name[1 << 1] << name[7 >> 1] << endl;
}

正确答案正确

解析详情

【答案】正确

【考点】表达式求值与字符串下标

【解析】 false、true 转为下标 0、1,1<<1=2,7>>1=3;依次访问 name[0]、name[1]、name[2]、name[3],输出 GESP。

【易错点】 布尔值作为下标时会转换为整数 0 和 1。

8 题(判断题2 分)

某个初学 C++ 的学生,在对照参考程序写了一个程序以后,信心满满地进行编译,他敲进编译器的全部代码如下,这个程序能够正常编译运行。

1 #include<bits/stdc++.h>
2 using namespace std;
3 int main() {
4     cout << "Hello world!" << endl;
5     return 0;
6 }

正确答案错误

解析详情

【答案】错误

【考点】C++ 源代码语法

【解析】 题目说明这些内容是学生敲进编译器的全部代码,因此每行开头的 `1`、`2`、`3` 等也是源代码的一部分。例如第一行在预处理指令 `#include` 前出现了数字 `1`,不符合 C++ 语法,程序不能正常编译。

【易错点】 不要把题目代码中的行首数字自动当成排版行号;本题正是考查误把行号输入源文件所造成的编译错误。

9 题(判断题2 分)

代码逐行复刻手工运算步骤,中间不能增加任何判断逻辑,否则就不属于模拟算法。

正确答案错误

解析详情

【答案】错误

【考点】模拟算法

【解析】 模拟算法是用程序复现问题描述的状态变化和规则,过程中完全可以使用 if 等判断处理分支,并不要求逐行照搬手工步骤。

【易错点】 “模拟”强调按规则更新状态,不等于程序中不能出现判断或循环。

10 题(判断题2 分)

判断一个 int 型数字 s[i] 是不是在 0 和 9 之间(可以是 0 和 9),判断条件可以写为 if (s[i] >= '0' && s[i] <= '9')。

正确答案错误

解析详情

【答案】错误

【考点】数字值与数字字符

【解析】 s[i] 是 int 型数字时应与整数 0、9 比较;'0' 和 '9' 是字符常量,其编码值通常为 48 和 57,判断的是数字字符编码范围。

【易错点】 不要混淆整数 0、9 与字符常量 '0'、'9'。