bitset详解以及用法

butset详解以及用法

bitset是C++ 标准库中的一个类,它提供了一种方便的方式来操作位序列,常用于位运算和状态压缩。下面我将为您详细介绍 bitset 的基本概念、基本用法以及一些常用的成员函数。

基本概念

1、bitset 可以看作是一个多位二进制数,其每一位都是 0 或 1。
2、它是一个固定大小的容器,可以存储指定数量的位。
3、由于 bitset 支持基本的位运算,因此它非常适合用于状态压缩和表示一组布尔值。

基本用法

定义

bitset<N> b; // 定义一个 N 位的 bitset,所有位初始化为 0

N是正整数表示bitset的大小

位运算操作符

1、~b:对 b 中的每一位取反。
2、b1 & b2、b1 | b2、b1 ^ b2:对两个位数相同的 bitset 执行按位与、或、异或运算。
3、b << n、b >> n:将 b 左移或右移 n 位(右侧或左侧补零)。
4、b1 == b2、b1 != b2:比较两个位数相同的 bitset 是否相等。

访问和修改位

b[k]:访问或修改 b 的第 k 位(从 0 开始计数)。

成员函数

1、b.count():返回 b 中设置为 1 的位数。
2、b.any():如果 b 中至少有一位为 1,则返回 true;否则返回 false。
3、b.none():如果 b 中的所有位都为 0,则返回 true;否则返回 false。
4、b.set():将 b 中的所有位设置为 1。
5、b.set(k, v):将 b 的第 k 位设置为 v(v 为 true 或 false)。
6、b.reset():将 b 中的所有位设置为 0。
7、b.reset(k):将 b 的第 k 位设置为 0。
8、b.flip():将 b 中的所有位取反。
9、b.flip(k):将 b 的第 k 位取反。
10、b.to_ulong()、b.to_ullong():将 bitset 转换为 unsigned long 或 unsigned long long 类型的整数(注意转换时的位数限制)。

类型转换

1、数字转换为 bitset:将数字转换为二进制,并存储在 bitset 中。如果数字的二进制位数小于 bitset 的大小,则在前面补零;如果大于 bitset 的大小,则只取最低的 N 位。
2、字符串转换为 bitset:字符串只能包含 0 和 1,否则会报错。

注意事项

1、bitset 的长度是固定的,在定义时需要指定。
2、bitset 适用于小规模的位运算和状态压缩,如果规模较大,可能需要考虑其他数据结构或方法。
3、bitset 底层是通过数组来实现的,每个元素占用 1 位空间,但每 8 位(一个字节)实际上会占用一个字节的存储空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值