位运算trick

补码

正数和0补码为本身,负数补码为取反码后加1

多目运算

有几个数参与运算就有几个目,比如取反是单目运算~

设置一位为0或是1

int st(int x, int i, int k) {
    if (k) 
        return (x | (1 << i));
    else 
        return x & ~(1 << i); 
}

汉明权重

popcount,即一个二进制数中1的个数
状压dp中避免枚举重复状态
求数x汉明权重相同的下一个数(0要特判)

int t = x + (x & -x);
x = t | ((((t&-t)/(x&-x))>>1)-1);

bitset用法

不会用

posted @ 2024-12-13 15:35  lyrrr  阅读(0)  评论(0编辑  收藏  举报