【技巧】——位运算

146 阅读1分钟

位运算

lowbit操作(返回最后一位1后的数)

lowbit:

x & -x;

eg:10001100 进行 lowbit 操作后,得到100

二进制中1的个数

#include <algorithm>
#include <cstdio>
using namespace std;
int n;

int lowbit(int x)
{
    return x & -x;
}
int main()
{
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        int x, res = 0;
        scanf("%d", &x);
        while (x) {
            x -= lowbit(x);
            res++;
        }
        printf("%d ", res);
    }
    return 0;
}

1 与 0 的互换

用于状态改变

st[i] ^= 1

对于数字0和1,由:

0 ^ 1 = 1; 1 ^ 1 = 0

可知之需要对该变量 ^1 即可实现0与1的转换

同理对于'0','1',其ASCII码为0011 0000、0011 0001,也是适用 ASKCII码表 ASKII码表.jpeg