| 符号 | 名称 | 运算规则 | 蓝桥杯常见应用 |
|---|---|---|---|
& |
按位与 | 两位都为1时,结果为1 | 判断奇偶 (x & 1)、清零特定位、取模(对2的幂) |
| ` | ` | 按位或 | 两位都为0时,结果为0,否则为1 |
^ |
按位异或 | 两位相同为0,不同为1 | 查找单身数字 、不使用临时变量交换数值 |
~ |
按位取反 | 0变1,1变0 | 配合&运算实现特定位清零 (x & ~(1 << k)) |
<< / >> |
左移/右移 | 将所有位向左/右移动 | 快速进行乘/除2的幂运算、获取或设置特定位 |
核心技巧:竞赛中的杀手锏
-
异或 (
^) 的神奇用法 :异或运算的核心性质是x ^ x = 0和x ^ 0 = x,由此衍生出几个竞赛中非常巧妙的用法。-
"单身狗"问题:在一个数组中,除了一个元素出现奇数次外,其他元素均出现偶数次。将所有元素异或起来,最终结果就是那个"落单"的元素。
-
交换两个数 :无需临时变量,利用异或的自反性,使用
a ^= b; b ^= a; a ^= b;三步即可完成交换。 -
快速判断两个数是否相等 :直接
(a ^ b) == 0。
-
-
"与"运算 (
&) 的精妙用法-
判断奇偶 :
(x & 1) == 1为奇数,(x & 1) == 0为偶数。 -
判断2的幂次 :
x > 0且(x & (x - 1)) == 0,则x是2的幂次。 -
统计二进制中1的个数 :通过
x = x & (x - 1)循环,每执行一次就消除一个最低位的1,直到x变为0,循环次数即1的个数。 -
计算 lowbit :
lowbit = x & -x可以提取出x的二进制表示中最低位的1所代表的值。这是树状数组实现的基础,也是在状态压缩DP中枚举子集的关键。
-