💡 位运算
位(bit)就是二进制里的一个小格子。位运算是让电脑「一位一位」地比较和挪动数字:与、或、非、异或像四种开关,左移右移像让数字排着队搬家。
考纲知识点:与(&)、或(|)、非(~)、异或(^)、左移(<<)、右移(>>)
📖
考纲 · 知识点详述
摘自《CCF编程能力等级认证 C++&Python 认证标准》C++ 三级
- (3)掌握位运算:与(&)、或(|)、非(~)、异或(^)、左移(<<)、右移(>>)的基本使用方法及原理。
📚
先学一学
花 5 分钟读完下面 5 课,再去闯关就不慌啦
1
🎛️ 位:数字的小格子
一个数在电脑里会被拆成一排 0/1,每一个 0/1 就是一个「位」。比如 13 用 4 位写是 1101(8+4+1)。位运算就是对这些格子做操作:两个数的格子对对齐、逐位算,或者让整排格子搬家。
🌟 行业实际:为什么要学位运算?
位运算超级快,是电脑的「原生语言」。游戏引擎判断开关、图片取颜色、网络压缩数据,全都在用。不过对小朋友来说,先记住它像开关游戏就行:开 = 1、关 = 0。
💡 口诀:位 = 0 或 1 的小格子;位运算 = 一个格子一个格子地算。
2
🔦 与(&)、或(|)、非(~):三种开关
🤝 与 &:两个都开才亮
像两个开关串在一起:只有两个都是 1,结果才是 1。只要有一个 0,结果就是 0。
0&0=0、0&1=0、1&0=0、1&1=1。
0&0=0、0&1=0、1&0=0、1&1=1。
💡 口诀:与 = 都要;有 0 得 0。
🎈 或 |:有一个开就亮
像两个开关并排连:只要有一个是 1,结果就是 1;两个都是 0 才是 0。
0|0=0、0|1=1、1|0=1、1|1=1。
0|0=0、0|1=1、1|0=1、1|1=1。
💡 口诀:或 = 有一个就行;有 1 得 1。
🙅 非 ~:全部反过来
非只有一个数参与,把它每一位都翻面:0 变 1、1 变 0。~0=1、~1=0。
(真正的 C++ 里 int 有很多位,所以 ~5 会把 32 位全翻面,这里先记住一位的规则。)
(真正的 C++ 里 int 有很多位,所以 ~5 会把 32 位全翻面,这里先记住一位的规则。)
💡 口诀:非 = 翻面;0 变 1、1 变 0。
3
🎭 异或(^):不一样才亮
异或看两个位一不一样:相同得 0,不同得 1。就像玩「找不同」——两个小朋友出的手势不一样才得分:
🔢 规则表
0^0=0(相同)、1^1=0(相同)、0^1=1(不同)、1^0=1(不同)。
💡 口诀:异或 = 找不同;相同得 0、不同得 1。
🆚 易混对比:或 | vs 异或 ^
· 或:1|1 = 1(只要有 1 个开就行)。
· 异或:1^1 = 0(两个都一样 = 不同?不,相同就「没不同」,所以是 0)。
一句话:| 是「至少一个」,^ 是「刚好不一样」。
· 异或:1^1 = 0(两个都一样 = 不同?不,相同就「没不同」,所以是 0)。
一句话:| 是「至少一个」,^ 是「刚好不一样」。
💡 口诀:或看有没有 1,异或看不一样;1|1=1 但 1^1=0。
4
🚚 左移(<<)、右移(>>):数字搬家
把整排位往左或往右移动几格:
⬅️ 左移一位 = ×2
3 是 0011,左移 1 位变 0110 = 6(右边空出的格子补 0)。左移 2 位就是 ×4:3<<2 = 12。
💡 口诀:左移一位 = 乘 2;左边挤出去的直接扔掉。
➡️ 右移一位 = 除 2(向下取整)
6 是 0110,右移 1 位变 0011 = 3(最右边一位掉队扔掉)。7>>1 = 3,因为 7÷2=3.5,向下取整是 3。
读代码:cout << (6 >> 1); 输出 3。
读代码:cout << (6 >> 1); 输出 3。
💡 口诀:右移一位 = 除 2 取整;多出来的小数点直接丢掉。
5
🧩 综合对比与读代码实战
🧪 两个数逐位算一算
算 5 & 3:5 = 0101,3 = 0011。
0101
&0011
────
0001 = 1(只有最右边两位都是 1)。
0101
&0011
────
0001 = 1(只有最右边两位都是 1)。
💡 口诀:先都写成同样位数,再竖着一位一位算。
🆚 位运算 vs 逻辑运算(别混!)
· & 是按位与,算的是数字的每一位。
· && 是逻辑与,用在 if 判断「两个条件都成立」。
· | 按位或 vs || 逻辑或,同理。
· && 是逻辑与,用在 if 判断「两个条件都成立」。
· | 按位或 vs || 逻辑或,同理。
💡 口诀:单符号 &、| 算位;双符号 &&、|| 做判断。
🌟 行业实际:用一个数当一堆开关
很多软件用一个数的几位记录多个设置:第 0 位表示「自动保存开吗」、第 1 位表示「夜间模式开吗」……判断时用 flags & 2 就能只问第 1 位,又快又省空间。
💡 口诀:& 1 看最后一位是不是奇数;& 数字 = 只留想看的那些位。
🎯
闯关小锦囊 · 考点提醒
- 与 &:两个都 1 才得 1(有 0 得 0);或 |:有一个 1 就得 1(有 1 得 1)。
- 异或 ^:相同得 0、不同得 1(1^1=0,不是 1);非 ~:0↔1 翻面。
- 逐位算要位数对齐:5 & 3 = 0101 & 0011 = 0001 = 1;1100 & 1010 = 1000。
- 左移一位 = ×2(3<<2 = 12);右移一位 = ÷2 取整(6>>1 = 3、7>>1 = 3)。
- 位运算 & 不是逻辑 &&;一个是算位、一个是判断条件。
🎮
学完了?来闯关!
下面 15 个小挑战,点一点就能玩
Demo 原型 · 每个知识点独立页面 · 暂不含真实编译与进度存储。