$$\color{red}{算法}\color{blue}{基础课}\color{purple}{笔记and题解}\color{green}{汇总}$$
笔记:
位运算是个好东西可惜我不会用。
这个帖子适合位运算中有一定基础的童鞋们看。
大佬别来虐场
-
求$n$的二进制位表示中第$k$为是几?
- 把第$k$位移动到最后一位。
- 看各位
- 得出公式
n>>k&1
-
返回$n$的最后一位$1$。
- 也就是求解$lowbit(n)$。
- 求解过程:
n&(-n)
-
统计$n$的二进制表示中$1$的个数(本题)?
while(n) ans++, n -= lowbit(n);
代码:
#include <bits/stdc++.h>
using namespace std;
int lowbit(int x) {
return x & (-x);
}
int main() {
int t, x; cin>>t;
while (t--) {
cin>>x;
int ans = 0;
while (x) ans ++, x -= lowbit(x);
cout << ans << " ";
}
return 0;
}
while(n) ans++, n -= lowbit(n);
这句啥意思呀,为什么是减呢,有点看不懂这个n
就是把 n 这个数在二进制下的最后一个 1 去掉,详细可以去网上搜 lowbit
嗯,我懂了,蟹蟹啦
ok