1. 知识回顾
1.1 按位与、或、异或、取反
- & (按位与):对应位都为 1 则为 1,否则为 0。
- | (按位或):对应位有 1 则为 1,全 0 才为 0。
- ^ (按位异或):对应位相反则为 1,相同则为 0。
- ~ (按位取反):0 变为 1,1 变为 0。
1.2 左移 / 右移操作符
- 左移 (<<):二进制位整体向左移动,左边丢弃,右边补 0。
- 右移 (>>):二进制位整体向右移动,右边丢弃。分为逻辑右移(左边补 0)和算术右移(左边补符号位)。大多数编译器采用算术右移。
注意:对于移位运算符,不要移动负数位,这是未定义行为。
2. 位运算符的应用
2.1 判断奇偶数
一个数的二进制表示中,最后一位的权重是 2^0。若末位为 1 则是奇数,为 0 则是偶数。利用按位与运算符与 1 进行运算即可判断。
int main() {
int n;
cin >> n;
if (n & 1) {
cout << "odd" << endl; // 奇数
} else {
cout << "even" << endl; // 偶数
}
return 0;
}

2.2 获取二进制位中的指定位
获取某一位的值,可先将该数右移至目标位置,再与 1 进行按位与运算。
例如获取第 3 位(索引为 2):
int main() {
int a = 5; // 101
// goal: 获取第 3 位(索引 2)
int b = (a >> 2) & 1;
cout << b << endl; // 结果为 1
;
}





