📘GESP 5级 · 位移运算

2026-08-21
⭐⭐ GESP 5级

📖概念讲解

【考点 · 5级】位移运算:左移 << 和右移 >>,属于位运算类,是二进制层面的操作。

【说人话】

左移 n << k 就是把 n 的二进制位往左搬 k 位,右边补 0,效果等于 n × 2k。右移 n >> k 就是往右搬 k 位,左边补符号位(算术右移),效果等于 n ÷ 2k(向下取整)。

核心要点:

💻代码示例

1#include <iostream>
2using namespace std;
3
4int main() {
5 int a = 5; // 二进制 101
6
7 // 左移:5 << 1 = 10 (相当于 ×2)
8 cout << "5 << 1 = " << (a << 1) << endl; // 左移1位 = ×2
9
10 // 左移:5 << 3 = 40 (相当于 ×8)
11 cout << "5 << 3 = " << (a << 3) << endl; // 左移3位 = ×8
12
13 // 右移:40 >> 3 = 5 (相当于 ÷8)
14 cout << "40 >> 3 = " << (40 >> 3) << endl; // 右移3位 = ÷8
15
16 // 快速计算 2 的幂次:1 << n = 2^n
17 cout << "2^10 = " << (1 << 10) << endl; // 1左移10位 = 1024
18
19 // 右移奇数:7 >> 1 = 3(不是3.5,向下取整)
20 cout << "7 >> 1 = " << (7 >> 1) << endl; // 右移1位 = ÷2向下取整
21
22 // 判断奇偶:n & 1 等价于 n % 2
23 int n = 13;
24 cout << n << " 是" << ((n & 1) ? "奇数" : "偶数") << endl; // &1判断末位
25
26 return 0;
27}
28// 输出: 5 << 1 = 10
29// 5 << 3 = 40
30// 40 >> 3 = 5
31// 2^10 = 1024
32// 7 >> 1 = 3
33// 13 是奇数

🧩互动小测

Q1: 8 >> 2 的结果是?

Q2: 1 << 5 的结果是?

Q3: 15 >> 1 的结果是?

🏋️动手练一练

📝 编程练习

给定一个正整数 n,用位移运算输出:
1. n 左移 1 位的结果
2. n 右移 2 位的结果
3. 用 (1 << k) 计算并输出 2k(k 从 0 到 9)

提示:左移 = ×2的幂,右移 = ÷2的幂(向下取整),1 << k 就是 2k。
参考答案:
#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;                    // 读入一个正整数

    cout << "n << 1 = " << (n << 1) << endl;  // 左移1位 = n*2
    cout << "n >> 2 = " << (n >> 2) << endl;  // 右移2位 = n/4向下取整

    for (int k = 0; k <= 9; k++) {    // 遍历 k=0~9
        cout << "2^" << k << " = " << (1 << k) << endl;  // 1左移k位
    }
    return 0;
}

要点:位移运算本质是二进制移位,左移乘以 2 的幂,右移除以 2 的幂并向下取整。1 << k 是快速算 2k 的标准写法。

📝易错点提醒

学完这个知识点后点一下