林老师 · 客观题题库 · 专题 11 位运算 · 复习强化

专题 11 位运算 · 复习强化

50 题 · 每题对应一个知识细节 · 全部原创
真题
复刻
试卷编号ORIG-专题11位运算-复习强化
题目总数54 题 · 100 分
试卷类型客观题
考生须知:
① 本卷共 9 大部分,合计 54 题 · 100 分,全部为客观题;
② 试卷右上角设有 「提交答卷」「重置考试」 按钮,提交后系统自动判分并显示答题正确情况,请确认全部作答后再行提交;
③ 试卷不显示答案,提交后方可查看每题作答与正确答案的对照;
④ 答卷进度会保留在本地缓存中,刷新或再次打开仍可继续作答;
⑤ 本卷仅供学生练习使用;请勿用于其他用途;题面有问题请联系:i64coder@163.com。

判 分 报 告

0 / 100 分
0
答 对 · 得 0
0
答 错 · 失 0
当前筛选下没有题目

基本位运算

7 QUESTIONS · 2 POINTS EACH
第 1 题 A1 未作答

阅读下面的程序:

01int x = 12, y = 10;
02int z = x & y;

已知 12=(1100)212 = (1100)_210=(1010)210 = (1010)_2z 的值是( )。

(2 分)
第 2 题 A2 未作答

阅读下面的程序:

01int a = 12 | 10;   // 先按位或
02int b = a & 6;     // 再按位与

执行后 b 的值是( )。已知 12=(1100)212 = (1100)_210=(1010)210 = (1010)_26=(0110)26 = (0110)_2

(2 分)
第 3 题 A3 未作答

阅读下面的程序:

01int a = 7, b = 3;
02a = a ^ b;
03b = a ^ b;
04a = a ^ b;

执行后 ab 的值分别是( )。

(2 分)
第 4 题 A4 未作答

阅读下面的程序:

01int x = 7;
02int y = ~~x;

执行后 y 的值是( )。

(2 分)
第 5 题 A5 未作答

阅读下面的程序,其中 A = 12(二进制 1100)表示集合 {3,2}\{3, 2\}B = 10(二进制 1010)表示集合 {3,1}\{3, 1\}

01int A = 12, B = 10;
02int un = A | B;   // 并集
03int in = A & B;   // 交集

执行后 unin 的值分别是( )。

(2 分)
第 6 题 A6 未作答

阅读下面的程序(按常见编译器的补码行为):

01int x = 1 << 31;

执行后 x 的值是( )。

(2 分)
第 7 题 A7 未作答

阅读下面的程序:

01int x = 5, y = -3;
02bool same = (x ^ y) >= 0;

执行后 same 的值是( )。

(2 分)

移位运算

6 QUESTIONS · 2 POINTS EACH
第 8 题 B1 未作答

阅读下面的程序:

01int x = 3;
02x = x << 4;

执行后 x 的值是( )。

(2 分)
第 9 题 B2 未作答

阅读下面的程序:

01int x = 23;
02x = x >> 2;

执行后 x 的值是( )。

(2 分)
第 10 题 B3 未作答

阅读下面的程序:

01int a = -7 >> 1;
02int b = -7 / 2;

执行后 ab 的值分别是( )。

(2 分)
第 11 题 B4 未作答

阅读下面的程序:

01int x = 1 << 10;

执行后 x 的值是( )。

(2 分)
第 12 题 B5 未作答

阅读下面的程序:

01int a = 5;
02a ^= a;
03a ^= a;

执行后 a 的值是( )。

(2 分)
第 13 题 B6 未作答

阅读下面的程序:

01int s = 0;
02for (int i = 0; i < 5; i++)
03    s += 1 << i;

执行后 s 的值是( )。

(2 分)

负数与符号位

6 QUESTIONS · 2 POINTS EACH
第 14 题 C1 未作答

阅读下面的程序:

01int a = 5;
02int b = ~a;

执行后 b 的值是( )。

(2 分)
第 15 题 C2 未作答

阅读下面的程序:

01int x = 7;
02int y = ~x + 1;

执行后 y 的值是( )。

(2 分)
第 16 题 C3 未作答

阅读下面的程序:

01int x = -8;
02x = x >> 2;

执行后 x 的值是( )。已知 8-8 的补码末字节为 1111 1000

(2 分)
第 17 题 C4 未作答

阅读下面的程序:

01int x = -2, y = 3;
02int z = x & y;

执行后 z 的值是( )。已知 2-2 的补码末四位为 11103=(0011)23 = (0011)_2

(2 分)
第 18 题 C5 未作答

用 8 位补码表示整数时,能表示的最小整数是( )。

(2 分)
第 19 题 C6 未作答

阅读下面的程序:

01int x = -1;
02x = x << 1;

对这段代码,下列说法正确的是( )。

(2 分)

位运算技巧

6 QUESTIONS · 2 POINTS EACH
第 20 题 D1 未作答

阅读下面的程序:

01int x = 9;
02int a = x & 0;
03int b = x ^ 0;

执行后 ab 的值分别是( )。

(2 分)
第 21 题 D2 未作答

阅读下面的程序:

01int a = 7, b = 3;
02int c = a ^ b ^ b;

执行后 c 的值是( )。

(2 分)
第 22 题 D3 未作答

已知 a ^ b ^ c = 0,其中 a = 3b = 5,则 c 的值是( )。

(2 分)
第 23 题 D4 未作答

阅读下面的程序:

01int x = 10, y = 6;
02int z = x | (x & y);

执行后 z 的值是( )。

(2 分)
第 24 题 D5 未作答

阅读下面的程序:

01int a[5] = {2, 3, 2, 4, 3};
02int ans = 0;
03for (int i = 0; i < 5; i++)
04    ans ^= a[i];

执行后 ans 的值是( )。

(2 分)
第 25 题 D6 未作答

阅读下面的程序:

01int x = 7;
02x >>= 1;
03x <<= 1;

执行后 x 的值是( )。已知 7=(111)27 = (111)_2

(2 分)

位读写与 lowbit

8 QUESTIONS · 2 POINTS EACH
第 26 题 E1 未作答

阅读下面的程序,其中 x 的二进制为 0101(十进制 55),k = 3

01int x = 5;   // 二进制 0101
02int k = 3;
03x = x | (1 << k);

执行后 x 的二进制是( )。

(2 分)
第 27 题 E2 未作答

阅读下面的程序,其中 x 的二进制为 1111(十进制 1515),k = 2

01int x = 15;   // 二进制 1111
02int k = 2;
03x = x & ~(1 << k);

执行后 x 的二进制是( )。

(2 分)
第 28 题 E3 未作答

阅读下面的程序,其中 x 的二进制为 1010(十进制 1010),k = 2

01int x = 10;   // 二进制 1010
02int k = 2;
03x = x ^ (1 << k);

执行后 x 的二进制是( )。

(2 分)
第 29 题 E4 未作答

阅读下面的程序,其中 x 的二进制为 1100(十进制 1212):

01int x = 12;   // 二进制 1100
02int bit = (x >> 2) & 1;

执行后 bit 的值是( )。

(2 分)
第 30 题 E5 未作答

阅读下面的程序:

01int m = (1 << 4) - 1;

执行后 m 的二进制是( )。

(2 分)
第 31 题 E6 未作答

阅读下面的程序,其中 x 的二进制为 110101(十进制 5353):

01int x = 53;   // 二进制 110101
02int k = 3;
03x = x & ((1 << k) - 1);

执行后 x 的值是( )。

(2 分)
第 32 题 E7 未作答

阅读下面的程序:

01int x = 12;
02int y = x & -x;

执行后 y 的值是( )。已知 12=(1100)212 = (1100)_2

(2 分)
第 33 题 E8 未作答

阅读下面的程序:

01int x = 10;
02int y = x & (x - 1);

执行后 y 的值是( )。已知 10=(1010)210 = (1010)_2

(2 分)

混合综合

6 QUESTIONS · 2 POINTS EACH
第 34 题 F1 未作答

阅读下面的程序:

01int x = 2;
02if (x & 1 == 0)
03    cout << "A";
04else
05    cout << "B";

程序的输出是( )。

(2 分)
第 35 题 F2 未作答

阅读下面的程序:

01int x = 1 << 2 + 1;

执行后 x 的值是( )。

(2 分)
第 36 题 F3 未作答

阅读下面的程序:

01int a = 6 & 4;
02int b = 6 && 4;

执行后 ab 的值分别是( )。

(2 分)
第 37 题 F4 未作答

阅读下面的程序:

01int x = 6 ^ 1 | 2;

执行后 x 的值是( )。

(2 分)
第 38 题 F5 未作答

阅读下面的程序:

01int a = 29 % 8;
02int b = 29 & 7;

执行后 ab 的值分别是( )。

(2 分)
第 39 题 F6 未作答

阅读下面的程序:

01int x = 2;
02x |= 3;
03x <<= 1;
04x ^= 1;

执行后 x 的值是( )。

(2 分)

位运算应用

6 QUESTIONS · 2 POINTS EACH
第 40 题 G1 未作答

阅读下面的程序:

01int x = 14;
02if (x & 1)
03    cout << "odd";
04else
05    cout << "even";

程序的输出是( )。

(2 分)
第 41 题 G2 未作答

阅读下面的程序:

01int x = 15, cnt = 0;
02while (x) {
03    cnt++;
04    x = x & (x - 1);
05}

执行后 cnt 的值是( )。

(2 分)
第 42 题 G3 未作答

阅读下面的程序:

01bool isPow2(int x) {
02    return x > 0 && !(x & (x - 1));
03}

调用 isPow2(16)isPow2(12),返回值依次是( )。

(2 分)
第 43 题 G4 未作答

阅读下面的程序,其中字符 'A' 的 ASCII 码为 6565(十六进制 0x41):

01char c = 'A';
02c = c | 0x20;

执行后 c 变为( )。

(2 分)
第 44 题 G5 未作答

阅读下面的程序,其中 x = 3(二进制 11):

01int x = 3;   // 二进制 11
02int cnt = 0;
03for (int s = x; s; s = (s - 1) & x)
04    cnt++;

执行后 cnt 的值是( )。

(2 分)
第 45 题 G6 未作答

阅读下面的程序:

01int x = 6;
02while (x) {
03    cout << (x & 1);
04    x >>= 1;
05}

程序的输出是( )。

(2 分)

代码阅读与改错

5 QUESTIONS · 2 POINTS EACH
第 46 题 H1 未作答

阅读下面的程序:

01int s = 0;
02for (int i = 1; i <= 8; i++)
03    if (i & 1) s += i;   // i 为奇数
04    else s += i >> 1;    // i 为偶数

执行后 s 的值是( )。

(2 分)
第 47 题 H2 未作答

阅读下面的程序,其本意是判断 x 是否为 2 的幂:

01bool f(int x) {
02    return !(x & (x - 1));
03}

调用 f(0),返回值是( )。

(2 分)
第 48 题 H3 未作答

阅读下面的程序,其中 x = 12(二进制 1100):

01int x = 12;             // 二进制 1100
02int y1 = x & -x;        // 保留最低位的 1
03int y2 = x & (x - 1);   // 清零最低位的 1

执行后 y1y2 的值分别是( )。

(2 分)
第 49 题 H4 未作答

阅读下面的程序,本意是构造低 k 位全为 1 的掩码:

01int k = 4;
02int m = 1 << k - 1;

执行后 m 的值是( )。

(2 分)
第 50 题 H5 未作答

下面的函数本意是:把 x 的第 k 位设置为 1,其他位不变。横线处应填( )。

01int setBit(int x, int k) {
02    return ____;
03}

(2 分)

真 题 演 练

4 QUESTIONS · 真题演练不计分
第 1 题 单选 未作答

二进制数 11 1011 1001 011101 0110 1110 1011 进行逻辑与运算的结果是( )。

(0 分)
CSP-J 2019 · 单选 第2题 | 知识点 位与、二进制
第 54~59 题 阅读程序 (共 0 分) 未作答

1  #include <iostream>
2  using namespace std;
3 
4  int n;
5  int a[1000];
6 
7  int f(int x)
8  {
9      int ret = 0;
10      for (; x; x &= x - 1) ret++;
11      return ret;
12  }
13 
14  int g(int x)
15  {
16      return x & -x;
17  }
18 
19  int main()
20  {
21      cin >> n;
22      for (int i = 0; i < n; i++) cin >> a[i];
23      for (int i = 0; i < n; i++)
24          cout << f(a[i]) + g(a[i]) << ' ';
25      cout << endl;
26      return 0;
27  }

54.

输入的 n 等于 10011001 时,程序不会发生下标越界。( )

55.

输入的 a[i] 必须全为正整数,否则程序将陷入死循环。( )

56.

当输入为 5 2 11 9 16 10 时,输出为 3 4 3 17 5。( )

57.

当输入为 1 511998 时,输出为 18。( )

58.

将源代码中 g 函数的定义(1414-1717 行)移到 main 函数的后面,程序可以正常编译运行。( )

59.

当输入为 2 -65536 2147483647 时,输出为( )。

CSP-J 2021 · 阅读程序 第16-21题 | 知识点 位与、文件读写
第 61~66 题 阅读程序 (共 0 分) 未作答

1  #include <iostream>
2  #include <string>
3  using namespace std;
4 
5  char base[64];
6  char table[256];
7 
8  void init()
9  {
10      for (int i = 0; i < 26; i++) base[i] = 'A' + i;
11      for (int i = 0; i < 26; i++) base[26 + i] = 'a' + i;
12      for (int i = 0; i < 10; i++) base[52 + i] = '0' + i;
13      base[62] = '+', base[63] = '/';
14 
15      for (int i = 0; i < 256; i++) table[i] = 0xff;
16      for (int i = 0; i < 64; i++) table[base[i]] = i;
17      table['='] = 0;
18  }
19 
20  string decode(string str)
21  {
22      string ret;
23      int i;
24      for (i = 0; i < str.size(); i += 4) {
25          ret += table[str[i]] << 2 | table[str[i + 1]] >> 4;
26          if (str[i + 2] != '=')
27              ret += (table[str[i + 1]] & 0x0f) << 4 | table[str[i + 2]] >> 2;
28          if (str[i + 3] != '=')
29              ret += table[str[i + 2]] << 6 | table[str[i + 3]];
30      }
31      return ret;
32  }
33 
34  int main()
35  {
36      init();
37      cout << int(table[0]) << endl;
38 
39      string str;
40      cin >> str;
41      cout << decode(str) << endl;
42      return 0;
43  }

61.

输出的第二行一定是由小写字母、大写字母、数字和 +/= 构成的字符串。( )

62.

可能存在输入不同,但输出的第二行相同的情形。( )

63.

输出的第一行为 -1。( )

64.

设输入字符串长度为 ndecode 函数的时间复杂度为( )。

65.

当输入为 Y3Nx 时,输出的第二行为( )。

66.

当输入为 Y2NmIDIwMjE= 时,输出的第二行为( )。

CSP-J 2021 · 阅读程序 第22-27题 | 知识点 移位运算、位与、位或
第 68~73 题 阅读程序 (共 0 分) 未作答

1  #include <iostream>
2 
3  using namespace std;
4 
5  int main()
6  {
7      unsigned short x, y;
8      cin >> x >> y;
9      x = (x | x << 2) & 0x33;
10      x = (x | x << 1) & 0x55;
11      y = (y | y << 2) & 0x33;
12      y = (y | y << 1) & 0x55;
13      unsigned short z = x | y << 1;
14      cout << z << endl;
15      return 0;
16  }

68.

删去第 77 行与第 1313 行的 unsigned,程序行为不变。( )

69.

将第 77 行与第 1313 行的 short 均改为 char,程序行为不变。( )

70.

程序总是输出一个整数 0。( )

71.

当输入为 2 2 时,输出为 10。( )

72.

当输入为 2 2 时,输出为 59。( )

73.

当输入为 13 8 时,输出为( )。

CSP-J 2022 · 阅读程序 第16-21题 | 知识点 位与、位或、移位运算、二进制