AND、OR、XOR 与移位
自信地读取并组合位
AND、OR、XOR 与移位 是 CoddyKit 上的免费 Competitive Programming Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Competitive Programming Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Competitive Programming Academy 课程共包含 4 节课。
位是您的工具箱
每个整数其实都是一串位,只由 0 和 1 组成。学会读取和组合它们,就能在竞赛中使用快速而巧妙的技巧。🔧
查看二进制形式
使用 Python 的bin()可以查看任意数字的位。前缀 0b 只是表示它是二进制数,后面的部分就是位模式。
print(bin(13)) # 0b1101AND 保留公共位
AND 运算符(&)只有在两个数字对应位置都为 1 时才会得到 1。它非常适合检查或屏蔽共享的位。
print(6 & 3) # 0b110 & 0b011 = 0b010 = 2OR 组合位
OR 运算符(|)只要任意一个数字对应位置为 1,就会得到 1。您可以用它打开标志位,同时不影响其他部分。
print(6 | 1) # 0b110 | 0b001 = 0b111 = 7XOR 找出差异
XOR 运算符会在两个位不同时得到 1。它是竞赛中用于切换位和找出唯一不同元素的常用工具。
print(6 ^ 3) # 0b110 ^ 0b011 = 0b101 = 5XOR 可以自我抵消
一个数字与自身进行 XOR 后始终为 0,而它与 0 进行 XOR 后保持不变。这种自我抵消的性质支撑了许多XOR问题。
print(7 ^ 7) # 0
print(7 ^ 0) # 7找出唯一的数
如果每个值都出现两次,只有一个值出现一次,那么将它们全部进行 XOR,成对出现的值就会相互抵消。最后留下的就是唯一的值。
ans = 0
for x in [4, 1, 2, 1, 2]:
ans ^= x
print(ans) # 4左移实现乘法
左移会将位向高位移动,并在右侧补入零。每左移一位,数值就会翻倍,相当于乘以 2 的幂。
print(3 << 2) # 3 * 4 = 12右移实现除法
右移会从右端移除位。每右移一位,数值就会减半,相当于除以 2 的幂并进行整数除法。
print(20 >> 2) # 20 // 4 = 5构造 2 的幂
将 1 左移 k 位,就能立即得到2 的 k 次方。这是创建单个位掩码最简洁的方法。
print(1 << 5) # 32竞赛中速度很重要
位运算符只需一个快速步骤即可完成,因此用移位替代算术运算,可能帮助您通过原本难以达到的时间限制。请熟练掌握它们。⚡
快速检查
现在测试一下您的位运算符。
回顾:位运算符
您已经认识了AND, OR, XOR和移位运算:用一个快速步骤组合、切换并缩放位。这些是后续所有位运算技巧的基础。🎉
常见问题解答
「AND、OR、XOR 与移位」课时是免费的吗?
是的 — 「AND、OR、XOR 与移位」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Competitive Programming Academy 课程的其余内容,请升级到 CoddyKit PRO。 Competitive Programming Academy 课程共包含 4 节课。
「AND、OR、XOR 与移位」这节课中我会学到什么?
自信地读取并组合位 你通过在浏览器中直接运行的动手代码来练习 Competitive Programming Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Competitive Programming Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Competitive Programming Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「AND、OR、XOR 与移位」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Competitive Programming Academy 课中编写并运行代码吗?
能。每节 Competitive Programming Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- AND、OR、XOR 与移位
- 设置、清除与翻转位
- 统计位数与最低位的置位
- 将位掩码用作微型集合