#include <bitset>
bitset 可看作一个多位二进制数,每八位占一个字节,相当于采用了状态压缩的二进制数组,并支持基本的位运算。
估算程序运行的时间时,一般采用32位整数的运算次数为基准,因此n位bitset执行一次位运算的复杂度可视为n/32。
声明
bitset s;
表示N位二进制数,<>中填写位数。
可以进行的基本位运算:
~s :按位取反。
&,|,^:按位与,或,异或运算。
>>,<< :把一个bitset右移,左移若干位。
==,!=:比较两个bitset代表的二进制是否相等。
[]操作符
s[k] 表示s的第k位, 可以取值,赋值。
count
s.count() 返回有多少位1。
any/none
若s的所有位都为0,则s.any()返回fasle, s.none()返回true;
若s的所有位都为1,则s.any()返回true, s.none()返回false;
set/reset/flip
s.set() 把s所有位变成1。
s.set(k, v) 把s的第k位变成 v,即s[k] = v。
s.reset() 把s所有位变成0。
s.reset(k) 把s的第k位变成 0,即s[k] = 0。
s.flip() 把s的所有位按位取反, 即s = ~s。
s.flip(k) 把s的第k位按位取反, 即s[k] ^= 1。