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
    评论
C++中的bitset是一个模板类,用于表示和操作位集合。它提供了一种方便的方式来处理二进制数据,可以将一组位表示为整数值。 使用bitset,你可以: 1. 创建bitset对象:可以指定位数或使用默认位数(通常为32或64)来创建一个bitset对象。 ```cpp std::bitset<8> bits1; // 创建一个8位的bitset对象 std::bitset<16> bits2(0b1010101010101010); // 使用指定的二进制值来创建一个16位的bitset对象 std::bitset<32> bits3("10101010"); // 使用指定的字符串来创建一个32位的bitset对象 ``` 2. 访问和修改位:可以使用下标运算符[]来访问和修改位。 ```cpp std::bitset<8> bits(0b11001100); bool bit = bits[2]; // 获取第2位的值(1) bits[5] = 0; // 将第5位设置为0 ``` 3. 进行位操作:可以执行与、或、异或等位操作。 ```cpp std::bitset<8> bits1(0b11001100); std::bitset<8> bits2(0b10101010); std::bitset<8> result = bits1 & bits2; // 按位与操作 result = bits1 | bits2; // 按位或操作 result = bits1 ^ bits2; // 按位异或操作 ``` 4. 执行位集合操作:可以执行位的翻转、求反等操作。 ```cpp std::bitset<8> bits(0b11001100); bits.flip(); // 翻转所有位 bits.reset(); // 将所有位设置为0 bits.set(); // 将所有位设置为1 ``` 5. 获取位集合信息:可以获取位集合的大小、字符串表示、二进制表示等信息。 ```cpp std::bitset<8> bits(0b11001100); int size = bits.size(); // 获取位集合的大小(8) std::string str = bits.to_string(); // 获取位集合的字符串表示("11001100") unsigned long value = bits.to_ulong(); // 获取位集合的整数值(204) ``` 注意:bitset是固定长度的,一旦创建就不能改变长度。如果需要动态长度的位集合,可以使用vector<bool>或自定义的数据结构
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值