位运算基础
概念讲解
常见位运算
| 运算符 | 名称 | 说明 |
|---|---|---|
| & | 按位与 | 都为 1 才为 1 |
| | | 按位或 | 有 1 就为 1 |
| ^ | 按位异或 | 不同为 1 |
| ~ | 按位取反 | 0 变 1,1 变 0 |
| << | 左移 | 乘以 2^n |
| >> | 右移 | 除以 2^n |
常见应用
奇偶判断
12if (n & 1) { /* 奇数 */ }
else { /* 偶数 */ }乘除 2 的幂
12n << 1 // n * 2
n >> 1 // n / 2交换两个数
123a ^= b;
b ^= a;
a ^= b;lowbit 操作
123int lowbit(int x) {
return x & (-x);
}考点分析
初赛考查方式
- 选择题: 位运算结果
- 程序阅读: 位运算程序
- 填空题: 位运算应用
常见考点
- 位运算计算
- 奇偶判断
- lowbit 操作
例题精讲
例题 1:位运算
题目: 5 & 3 是多少?
解答:
5 = 101
3 = 011
--------
5 & 3 = 001 = 1例题 2:lowbit
题目: lowbit(12) 是多少?
解答:
12 = 1100
-12 = 0100(补码)
12 & (-12) = 0100 = 4练习题
- 5 | 3 是多少?
查看答案
7
5 = 101
3 = 011
--------
5 | 3 = 111 = 7- 5 ^ 3 是多少?
查看答案
6
5 = 101
3 = 011
--------
5 ^ 3 = 110 = 6- lowbit(6) 是多少?
查看答案
2
6 = 110
-6 = 010(补码)
6 & (-6) = 010 = 2易错点
⚠️ 注意:
- 位运算优先级低,要加括号
- 左移可能溢出
- 负数用补码表示
- lowbit 在树状数组中很重要