在头文件include<bitset>
中
定义
它是一种类似数组的结构,它的每一个元素只能是0或1,每个元素仅用1bit空间,每八位占用一个字节,可用于状态压缩,n位的bitset执行一次运算时间复杂度为n/32
bitset <n> op
//长度为n的默认都是0的串
类型之间的转换
数字转换为bitset:先转换为二进制,如果变成的二进制的位数小于n,那么前面的部分用0补充完整;如果位数大于n,那么我们只取最低位的n位,例如:
bitset <4> op(4)
,4变为二进制是100,但是有4位,那么前面多的位就用0补上,即op=0100
bitset <4> op(17)
,17变为二进制是10001,但是我们只要最低的四位,即op=0001
字符串转换为bitset:字符串只能含有0和1,否则会报错。当字符串的长度小于n的时候,前面多的部分用0补齐;小于n的时候只取前面n位,例如:
bitset <4> op("001")
,长度小前面用0补齐,即op=0001
bitset <4> op("110001")
,长度大只取前面4位,即op=1100
运算
可用的运算符:^,|,&,<<,>>,==,!=,~
bitset <4> a("0011");
bitset <4> b("1100");
cout<<(a|b)<<endl;//输出的是1111
cout<<(a&b)<<endl;//输出的是0000
cout<<(a^b)<<endl;//输出的是1111
cout<<(a<<2)<<endl;//a左移两位,低位补0,输出1100
cout<<(b>>2)<<endl;//b右移两位,高位补0,输出0011
cout<<(~a)<<endl;//将a取反,输出1100
也可以通过[]访问元素(类似数组,最低位下标从0开始),也可以给某一个元素赋值,例如:
bitset <4> op("1100")
,op[2]
就是1,注意,从最右边开始起始坐标为0
函数
bitset <5> op("11100")
op.count()
:求op中1的个数,为3
op.size()
:求op的大小,有5位
op.test(1)
:查找下标为1的元素,op[1]是0
op.any()
:检查op里是否有1
op.none()
:检查op里是否无1
op.all()
:检查op里是否全为1
op.flip()
:将op全部取反
op.flip(x)
:将op[x]取反
op.set()
:将op的全部元素变为1
op.set(x,0)
:只将op[x]置为0
op.set(x)
:只将op[x]置为1
op.reset()
:将op全部元素置为0
op.reset(x)
:只将op[x]置为0
op.to_string()
:将op转为string类型
op.to_ulong
:将op转为unsigned long 类型
op.to_ullong
:将op转为unsigned long long 类型