位运算的拓展运用
2026-08-04 13:14:59
发布于:江苏
(叠甲:本文章纯手搓,无借助任何AI)
首先,我们要了解位运算的基本符号:
& 按位与 同为1才为1
| 按位或 有1即为1
^ 按位异或 不同为1
~ 按位取反 0变1、1变0
<< 左移 各bit左移,低位补0
“>>” 右移 各bit右移(负数实现相关)
(注意:这些操作均为2进制下)
若我们把位运算用在集合上,可以怎么样呢
& 交集 𝐴∩𝐵
| 并集 𝐴∪𝐵
^ 对称差 𝐴△𝐵
举一个简单的例子:
int A = 0b00001111; // {0,1,2,3}<p></p>
<p>int B = 0b00110011; // {0,1,4,5}</p>
<p>int C = A | B; // 并集 = 0b00111111 = {0,1,2,3,4,5}</p>
int D = A & B; // 交集 = 0b00000011 = {0,1}
int x = 5;<p></p>
<p>bool odd = x & 1; // 奇数判断,比 x % 2 快</p>
<p>int y = x << 1;// 乘 2</p>
<p>int z = x >> 1;</p>
// 整除 2(仅非负)
int k = 2, x = 0;<br>
(x >> k) & 1; // 取第 k 位<br>
x |= (1 << k); // 第 k 位置 1<br>
x &= ~(1 << k); // 第 k 位清 0<br>
x <sup>= (1 << k); // 第 k 位翻转</sup>
int a = 3, b = 7;<br>
a = b; // a = a <sup> b<br>
b </sup>= a; // b = (a <sup> b) </sup> b = a<br>
a <sup>= b; // a = a </sup> (a ^ b) = b<br>
// 结果:a=7, b=3,无需临时变量
bool is_pow2 = (x & (x - 1)) == 0; // x 是 2 的幂<br>
int cnt = 0;<br>
while (x) { x &= (x - 1); cnt++; } // 数 1 的个数
int lowbit(int x) { return x & (-x); }<br>
// lowbit(12) = 12 & (-12) = 4
暂时完结
这里空空如也



















有帮助,赞一个