bitset
#include<bitset>
bitset可以看看作一个多位二进制数,每8位占用一个字节,相当于采用了状态压缩的二进制数组,并支持基本的位运算,在估算程序的运行的时间时,我们一般以32位正数的运算次数为基准,因此n位bitset执行一次位运算的复杂度可视为n/32,效率较高。
声明
bitset<10000> s ; 表示一个10000位二进制数,< >中填写位数。
下面把位数记为 n ;
位运算操作符:
~s : 返回对bitset按位取反的结果。
&,|,^ : 返回对两个位数相同的bitset执行按位与,或,异或运算的结果。
>>,!= : 比较两个bitset代表的二进制数是否相等。
[ ] 操作符
s[ k ] 表示s的第k位,既可以取值,也可以赋值。
在10000位二进制数中,最低位为 s [ 0 ] , 最高位是 s [ 9999 ] 。
count
s.count ( ) 返回有多少位为1;
any/none
若s的每一位都为0, 则s.any( ) 返回false,s.none( )返回true.
若s的至少有一位为1, 则s.any( ) 返回true,s.none( )返回flase.
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;