GESP 三级知识点

173 阅读5分钟

🧠 拓展记忆法:

异或两次相同的数,一定恢复原样”,这是位运算中非常重要的基本规律,常用于算法中如“找只出现一次的数”。 位运算是 C/C++ 中一个高频、实用且在 GESP 等编程等级考试中必考的内容,尤其在 GESP 二级和三级中尤为重要。


🧠 一图记住常见 位运算符

运算符名称功能示例(a=6, b=3)
&按位与两位都为1,结果才为1a & b = 2
``按位或有一个为1,结果为1
^按位异或相同为0,不同为1a ^ b = 5
~按位取反0变1,1变0(按补码处理)~a = -7
<<左移所有位向左移n位a << 1 = 12
>>右移所有位向右移n位(符号位保留)a >> 1 = 3

✅ 各运算符详细说明:

1. & 按位与

cpp
复制编辑
6 & 3  0110 & 0011 = 0010  2

2. | 按位或

cpp
复制编辑
6 | 3  0110 | 0011 = 0111  7

3. ^ 按位异或

cpp
复制编辑
6 ^ 3  0110 ^ 0011 = 0101  5

特点:

  • x ^ x = 0
  • x ^ 0 = x
  • x ^ a ^ a = x(可还原)

4. ~ 按位取反(补码)

cpp
复制编辑
~6 = -7

补码取反后多为负数,和原码/补码概念相关(深入内容)

5. << 左移

cpp
复制编辑
6 << 1 = 12

相当于:乘以2的一次方

6. >> 右移

cpp
复制编辑
6 >> 1 = 3

相当于:除以2的一次方(向下取整)


📌 常见应用技巧:

应用技巧示例
判断奇偶x & 1偶数为0,奇数为1
清零某些位x & mask把不需要的位清0
设置某些位为1`xmask`
取某一位值(x >> k) & 1取第k位是否为1
异或找唯一值x ^ y用于找“只出现一次的数”

🧪 GESP 风格例题

题1:

text
复制编辑
已知 int x = 6, y = 3; 则 x & y 的值为:

A. 0  
B. 2  
C. 3  
D. 5

✅ 答案:B


题2:

text
复制编辑
若 x 是一个 int 类型变量,且 x 为奇数,则 x & 1 的值为:

A. 0  
B. 1  
C. x  
D. 无法确定

✅ 答案:B


题3:

text
复制编辑
表达式: (x ^ 255) ^ 255 的结果为:

A. x  
B. 0  
C. 255  
D. 无法确定

✅ 答案:A(异或两次同一个数可还原)


✅ 推荐练习方向:

  1. 二进制转换熟练(正负数补码表示)
  2. 熟练掌握按位运算逻辑
  3. 巩固左移/右移的实际含义
  4. 常见算法中的异或应用

🧪 GESP 三级位运算专项训练卷(共10题)


第1题:基本按位与

已知:

cpp
复制编辑
int a = 6, b = 3;

a & b 的值是:

A. 0
B. 2
C. 3
D. 5

正确答案:B
🧠 解析:
6 = 0110
3 = 0011
按位与:0110 & 0011 = 0010 → 2


第2题:异或还原

已知:

cpp
复制编辑
int x = 123;

执行 x = (x ^ 55) ^ 55; 后,x 的值为:

A. 0
B. 55
C. 123
D. 178

正确答案:C
🧠 解析:
异或两次相同的数可还原:x ^ a ^ a == x


第3题:判断奇偶

对于任意整数 xx & 1 的结果为:

A. x 除以 2 的商
B. 0(偶数)或 1(奇数)
C. x 的最后两位
D. 永远是1

正确答案:B
🧠 解析:
最低位是1表示奇数,0表示偶数


第4题:按位或的结果

已知:

cpp
复制编辑
int a = 5, b = 10;

a | b 的值是:

A. 0
B. 15
C. 5
D. 10

正确答案:B
🧠 解析:
5 = 0101
10 = 1010
按位或:1111 → 15


第5题:按位取反

int a = 0;,则 ~a 的值是:

A. 0
B. -1
C. 1
D. 255

正确答案:B
🧠 解析:
取反是补码形式,~0 = -1(所有位都变成1)


第6题:左移运算

int a = 3;,则 a << 2 的值为:

A. 6
B. 8
C. 12
D. 1

正确答案:C
🧠 解析:
左移2位,相当于乘以2²:3 × 4 = 12


第7题:右移运算

int a = 20;,则 a >> 2 的值为:

A. 5
B. 10
C. 4
D. 0

正确答案:A
🧠 解析:
右移2位,相当于除以2²:20 / 4 = 5


第8题:清除最低3位

x & (~7) 的作用是:

A. 将 x 的最低3位全部设为1
B. 清除 x 的最低3位(变为0)
C. x 的高位清零
D. 保留 x 的最后一位

正确答案:B
🧠 解析:
7 = 00000111,~7 = 11111000,x & (~7) 会清除末3位


第9题:交换两个变量用异或

下面哪组语句可以不使用临时变量交换 ab 的值?

A. a = b; b = a;
B. a = a + b; b = a - b; a = a - b;
C. a = a ^ b; b = a ^ b; a = a ^ b;
D. a = a & b; b = a | b; a = b ^ a;

正确答案:C
🧠 解析:
异或交换法经典套路,三次异或可交换两个整数


第10题:按位与清零判断

若:

cpp
复制编辑
int x = 0b10101100; // 172

x & 0b11110000 的结果是:

A. 0b00001100
B. 0b10100000
C. 0b00000000
D. 0b10101100

正确答案:B
🧠 解析:
按位与保留前四位,清除后四位 → 10100000(= 160)


✅ 成绩评估参考:

正确题数建议
9-10非常棒!可以尝试 GESP 四级内容了
7-8掌握良好,建议多练习右移和掩码
5-6建议集中复习“异或、左移右移”概念
≤4需要系统学习位运算,可以我帮你规划课程