📅 2026-03-23 | 算法日记:位运算与循环控制专题
1. 📖 今日题目概览
2. 💻 核心代码复盘
场景再现:统计一个数二进制中有多少个 1。这是今天最关键的位运算逻辑。
int count_ones(int x) {
int cnt = 0;
while (x) {
if (x & 1) cnt++; // 检查最低位是否为 1
x >>= 1; // 右移一位,继续检查
}
return cnt;
}3. ⚠️ 踩坑记录(重点反思!)
❌ 语法低级错误
分号问题:今天在写
for循环时,习惯性在for(...);后面加了分号,导致循环体直接失效。
改进方案:写循环时,强迫自己先打 {} 再回车写内容。
漏写分号:在定义变量或
return语句结尾经常漏掉;。
警示:编译报错时优先看行尾。
🧠 逻辑卡壳处
循环嵌套:在“第 23 个满足条件”的题目中,内层循环处理位运算,外层循环控制数字增长。由于
ans++的位置放错,导致找错了一个数。体会:当逻辑变复杂时,函数封装(如把位运算逻辑单独写成
solve函数)是救命稻草,能让代码结构非常清晰。
4. 💡 今日新发现(Tips)
位运算提速:
x >>= 1效果等同于x / 2,但在底层执行更快。万能头文件:
#include <bits/stdc++.h>在做算法题时非常省心,不用一个个记头文件。IO 优化:
std::ios::sync_with_stdio(false); cin.tie(nullptr);这一行能极大提高cin的读取速度,防止在大数据量下超时。
原创
算法日记:位运算与循环嵌套初探
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。