CCF GESP 2026年6月认证 C++ 3级

单选题
共 15 道 每题 2 分 共计 30 分
第 1 题
关于计算机的数据编码,下面说法正确的是( )。
A
机器数 1000 1101B 的真值可能是 -13 (如果它是原码)或 141 (如果它是无符号数)等数,这取决于我们如何解释它。
B
计算机中,所有数据最终都以二进制、八进制、十六进制的形式存储和运算。
C
字节( Byte )是计算机中最小的数据单位。位( bit )是计算机中最小的存储单位。
D
计算机中, 1k 字节是 1000 字节的意思。
第 2 题
计算机厂商为了计算方便,一般采用 1000 进制。如果我们买的厂商标注的是 1 TB 的硬盘,它实际的存储容量是( )。
A
$1000 × 1000 × 1000 × 1000 ÷ 1024 ÷ 1024 ÷ 1024b = 931Gb$
B
$1000 × 1000 × 1000 × 1000 ÷ 1024 ÷ 1024 ÷ 1024B = 931GB$
C
$1024 × 1024 × 1024 × 1024 ÷ 1000 ÷ 1000 ÷ 1024B = 1049GB$
D
$1000 × 1024 × 1024 × 1024 ÷ 1024 ÷ 1024 ÷ 1024b = 977Gb$
第 3 题
低 4 位、高 4 位压缩技术,适用于数据仅使用字节的一部分(如仅用低 4 位)的场景。字节结构:一个字节为 8 位,分为高 4 位(高位)和低 4 位(低位)。当数据是十六进制数( 0~15,即 0x00xF ),每个值仅需 4 位表示,高 4 位全为 0 。将两个相邻的 4 位值合并为一个字节。四个数据 0x10x20x30x4 采用上述压缩技术压缩以后是( )。
A
12D34D
B
12Q34Q
C
12H34H
D
00010011B00110101B
第 4 题

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

A

负数的补码,一个快速方法是从右往左扫描正数的二进制形式,遇到第一个 1 之后,左边的所有位都取反。

B

对于一个 $n$ 位的二进制数:最大表示范围: $[-(2^{n-1}) - 1, + (2^{n-1} - 1)]$ 。

C

反码减法可以统一为加法。符号位可以直接参与运算。

D

反码表示中, 的表示不唯一: 0000 0000B1111 1111B

第 5 题
一种加密方式是字符数组与密钥 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
第 6 题

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

A

找唯一数:数组中唯一出现一次的数,其余出现两次,全部异或结果即为该数。例如:数组 [5, 7, 9, 7, 5] (唯一数是 9 )。

B

交换两个数: a ^= b; b ^= a; a ^= b; (无需临时变量)。

C

将二进制位整体左移 n 位,高位溢出舍弃,低位补 0 ;等价于 num 乘以 $2^n$。

D

对每一个二进制位取反,包括符号位,简单运算规则是 ~n = -n - 1

第 7 题
关于字符串和字符数组,下列说法正确的是( )。
A
char str[] = "GESP"; 
int len1 = sizeof(str); 
int len2 = strlen(str);
上面程序能够正确执行, len1len2 相等。
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;
这段程序能够正确执行,不存在数组越界行为。
第 8 题
计算机中的 2 KB 等于多少 bit ( )。
A
16384
B
20000
C
2000
D
2048
第 9 题
在 C++ 中,对于 位有符号整数 int 类型数据 n ,关于按位取反运算符 ~ ,下列说法正确的是( )。
A
~6 的结果是 5
B
按位取反满足公式 ~n = -n - 1
C
~0 的结果是 1
D
~(-2) 的结果是 -1
第 10 题

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

A

原码是最直观的一种有符号数表示方法。最高位(最左边的位)为符号位: 0 表示正数, 1 表示负数,其余位为数值位(真值的绝对值)。

B

补码完美解决了原码和反码的缺陷,是现代计算机中表示有符号整数的标准方式。正数的补码与其原码、反码相同;负数的补码是将其对应正数的原码按位取反(得到反码),然后加 1 。

C

计算补码的一个更快的技巧:从右往左扫描正数的二进制形式,遇到第一个 1 之后,左边的所有位都取反。

D

对于一个 $n$ 位的二进制数,补码最大表示范围为 $[-2^{n-1},+2^{n-1}]$。

第 11 题
下面选项中提到的变量都是正整数,关于位运算,下面说法错误的是( )。
A
num & 1 ,结果为 1 则奇数, 0 则偶数(仅看最低位)。
B
num & 0xFF 保留低 8 位。
C
num & b 的结果一定小于等于 num
D
num 左移导致高位溢出(如超过整型范围),结果符合乘法规律。
第 12 题
a=7, b=3, c=14, d=15, e=8 ,对于运算表达式 !a << b & c ^ d | e 的结果是( )。
A
0
B
15
C
7
D
14
第 13 题
关于 string 的成员函数,下面说法错误的是( )。
A
size() :返回字符串长度(字符个数,不含 '\0' )。
B
length()size() 功能完全一致,返回字符串长度。
C
empty() :判断字符串是否为空(非空返回 true ,空返回 false )。
D
s.append(s2, 0, 3);s2 下标 0 开始,截取 3 个字符。
第 14 题
以下数组定义,符合 C++ 语法的是( )。
A
int [10] a;
B
int b['&'];
C
int c[*];
D
double d[10.0];
第 15 题
现在有一个数,请你分别判断它们是否可能是二进制、八进制、十进制、十六进制。例如, 6AFF 就只可能是十六进制,而 1011 则是四种进制皆有可能。输入 N (保证$1 ≤ N ≤ 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 i = 0; str[i] != '\0'; i++)
            if (str[i] > max)
                max = str[i];
        ___________________________________________
    }
    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;
单选题部分已到底了。