#2323. GESP 202606 C++ 三级

GESP 202606 C++ 三级

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

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

2、计算机厂商为了计算方便,一般采用 10001000 进制。如果我们买的厂商标注的是 1 TB1\ \mathrm{TB} 的硬盘,它实际的存储容量是( )。 {{ select(2) }}

  • 10244 B1024^4\ \mathrm{B}
  • 10004 B1000^4\ \mathrm{B}
  • 10243 B1024^3\ \mathrm{B}
  • 10003 B1000^3\ \mathrm{B}

3、低 44 位、高 44 位压缩技术,适用于数据仅使用字节的一部分(如仅用低 44 位)的场景。字节结构:一个字节为 88 位,分为高 44 位(高位)和低 44 位(低位)。当数据是十六进制数(001515,即 0x00xF),每个值仅需 44 位表示,高 44 位全为 00。将两个相邻的 44 位值合并为一个字节。四个数据 0x10x20x30x4 采用上述压缩技术压缩以后是( )。 {{ select(3) }}

  • 12D12\mathrm{D}34D34\mathrm{D}
  • 12Q12\mathrm{Q}34Q34\mathrm{Q}
  • 12H12\mathrm{H}34H34\mathrm{H}
  • 00010011B00010011\mathrm{B}00110101B00110101\mathrm{B}

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

  • 负数的补码,一个快速方法是从右往左扫描正数的二进制形式,遇到第一个 11 之后,左边的所有位都取反。
  • 对于一个 nn 位的二进制数:最大表示范围:2n-2^n2n12^n-1
  • 反码减法可以统一为加法。符号位可以直接参与运算。
  • 反码表示中,00 的表示不唯一:0000 0000B0000\ 0000\mathrm{B}1111 1111B1111\ 1111\mathrm{B}

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

  • GCSR
  • RSCG
  • GCSA
  • BCSR

6、关于位运算,下列说法错误的是( )。 {{ select(6) }}

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

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

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

8、计算机中的 2 KB2\ \mathrm{KB} 等于多少 bit( )。 {{ select(8) }}

  • 1638416384
  • 2000020000
  • 20002000
  • 20482048

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

  • ~6 的结果是 55
  • 按位取反满足公式 n=n1\sim n=-n-1
  • ~0 的结果是 11
  • ~(-2) 的结果是 1-1

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

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

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

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

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

  • 00
  • 1515
  • 77
  • 1414

13、关于 string 的成员函数,下面说法错误的是( )。 {{ select(13) }}

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

14、以下数组定义,符合 C++ 语法的是( )。 {{ select(14) }}

  • int [10] a;
  • int b['&'];
  • int c[*];
  • double d[10.0];

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

#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;
}

{{ select(15) }}

  • cout << (max >= '1') << " " << (max >= '7') << " " << (max >= '9') << " " << (max >= 'F') << endl;
  • cout << (max <= '1') << " " << (max <= '7') << " " << (max <= '9') << " " << (max <= 'F') << endl;
  • cout << (max = '1') << " " << (max = '7') << " " << (max = '9') << " " << (max = 'F') << endl;
  • cout << (max < '1') << " " << (max < '7') << " " << (max < '9') << " " << (max < 'F') << endl;

16、又到期末考试周,小明发现这次许多闭卷考试不仅禁止携带手机、平板电脑,还有最近比较时髦的各类 AI 眼镜(也有叫智能眼镜)也同样不允许带入考场。这些 AI 眼镜应该也是内置了操作系统并可能支持 Wi-Fi 或蓝牙连接。

{{ select(16) }}

  • 正确
  • 错误

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

  • 正确
  • 错误

18、一个 nn 位的二进制数补码,最大的表示范围是从 2n1-2^{n-1}2n112^{n-1}-1。 {{ select(18) }}

  • 正确
  • 错误

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

  • 正确
  • 错误

20、如果 aint 类型的变量,且表达式 ((a & 1) == 1) 的值为 true,则说明 a 是奇数。 {{ select(20) }}

  • 正确
  • 错误

21、十六进制数 CCF\mathrm{CCF} 对应的二进制数、八进制数、十进制数分别是:1100110011111100110011116317631732693269。 {{ select(21) }}

  • 正确
  • 错误

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

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

{{ select(22) }}

  • 正确
  • 错误

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

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

{{ select(23) }}

  • 正确
  • 错误

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

  • 正确
  • 错误

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

  • 正确
  • 错误