bitset详解

在头文件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 类型

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值