学习目标:
No.9位运算
学习内容:
位运算有两个基本的应用
一个是求二进制数n中的第k位数字
另一个是返回二进制数n的最后一位1
n = 15 = (1111)2 k的下标:个位是第0位
步骤:
1:先把第k位移动到最后一位,用右移运算 n >> k
2:看一下个位是几 x & 1
1, 2步合起来就是n >> k & 1
lowbit操作:树状数组的基本操作。lowbit(x)代表返回x的最后一位1。例如想= 1010, lowbit(x) = 10
x = 101000 lowbit(x) = 1000.
实现过程:-x = ~x + 1
x = 1010…100…0
~x = 0101…011…0
~x + 1 = 0101…100…0
x & (~x + 1) = 0000…100…0
位运算模板(二进制中1的个数):
#include <iostream>
using namespace std;
int lowbit(int x)
{
return x & -x;
}
int main()
{
int n;
cin >> n;
while (n -- )
{
int x;
cin >> x;
int res = 0;
while(x) x -= lowbit(x), res ++;//每次减去最后一个1,看看一共减了多少次
cout << res << " ";
}
return 0;
}