Bitwise Operators

Bitwise Operators

基础的位操作见C++技巧

更多位操作

除了基础的And, Or, Xor, Not以及移位操作外,以下更多的位操作函数也是有用的:

以上是int的版本,在后面加上ll就是long long的版本,比如__builtin_ctzll(x)

子集的位表示

用bitmask可以方便地表示子集,例如遍历所有nn个元素的子集:

for (int b = 0; b < (1<<n); b++) {
    // process subset b
}

遍历所有kk个元素的子集:

for (int b = 0; b < (1<<n); b++) {
    if (__builtin_popcount(b) == k) {
        // process subset b
    }
}

习题

习题
CF1338ACFPowered Addition普及/提高-解答
CF1368DCFAND, OR and square sum普及+/提高解答