Acwing--位运算

模板

1
求n的第k位数字: n >> k & 1

求n的第k位数字

思路:先将n右移k位 然后进行与运算

代码如下:

1
2
3
4
5
6
7
8
#include <bits/stdc++.h>
int main()
{
int n,k;
scanf("%d%d",&n,&k);
printf("%d",n>>k&1);
return 0;
}

模板

1
返回n的最后一位1:lowbit(n) = n & -n

给定一个长度为n的数列,请你求出数列中每个数的二进制表示中1的个数。

输入:

第一行包含整数n。第二行包含n个整数,表示整个数列。

输出:

共一行,包含n个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表示中1的个数。

数据范围

1≤n≤1000001≤n≤100000,

0≤数列中元素的值≤109

样例输入:

1
2
5
3 1 2 4 5

样例输出:

1
1 1 2 1 2

思路:用lowbit求最后一个1 然后计数

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <bits/stdc++.h>
int lowbits(int x)
{
return x&-x;
}
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
int x,res=0;
scanf("%d",&x);
while(x)
{
x=x-lowbits(x);
res++;
}
printf("%d ",res);
}
return 0;
}
小礼物走一个哟
0%