返回首页 C++ 模板

位运算模板

与&、或|、异或^、取反~、左移<<、右移>>——用位操作提速

位运算 异或 移位 GESP3
#include <bits/stdc++.h>
using namespace std;

int main() {
    // ====== 1. 位运算符 ======
    int a = 5;   // 0101
    int b = 3;   // 0011
    cout << (a & b) << endl;   // 0001 → 1  (与)
    cout << (a | b) << endl;   // 0111 → 7  (或)
    cout << (a ^ b) << endl;   // 0110 → 6  (异或)
    cout << (~a) << endl;      // 取反
    cout << (a << 2) << endl;  // 10100 → 20 (左移2=×4)
    cout << (a >> 1) << endl;  // 0010 → 2   (右移1=÷2)

    // ====== 2. 常用技巧 ======
    // 判断奇偶
    if (a & 1) cout << "奇数" << endl;
    else cout << "偶数" << endl;

    // 交换两数(不用临时变量)
    int x = 3, y = 5;
    x ^= y; y ^= x; x ^= y;  // x=5, y=3

    // 取第 k 位
    int n = 13, k = 2;  // 13 = 1101
    cout << ((n >> k) & 1) << endl;  // 第2位是1

    // 设置第 k 位为 1
    n |= (1 << k);

    // 清除第 k 位为 0
    n &= ~(1 << k);

    // 快速乘除 2 的幂
    cout << (a << 3) << endl;  // 5×8=40
    cout << (a >> 1) << endl;  // 5/2=2

    // ====== 3. 异或性质 ======
    // a ^ a = 0, a ^ 0 = a
    // 交换律、结合律
    int arr[] = {1,2,3,2,1};  // 只出现一次的数
    int ans = 0;
    for (int v : arr) ans ^= v;
    cout << ans << endl;  // 3

    return 0;
}

📖 要点说明

⚠️ 常见错误