bitset【C++STL】

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;

猜你喜欢

转载自blog.csdn.net/sodacoco/article/details/82905864