C++ std::bitset

转载来源:C++ std::bitset - 知乎 (zhihu.com)

std::bitset 是 C++ 标准库中的一个类,用于表示二进制位序列。它提供了一种方便的方式来处理二进制数据,尤其适用于位运算操作。

std::bitset 类型表示一个固定长度的位序列,每个位都只能是 0 或 1。这个固定长度在创建对象时指定,并且不能在运行时更改。类似于整数类型,std::bitset 支持多种操作,包括位运算、位查询和位设置。

下面是 std::bitset 类型的创建方式:

 #include <bitset>
 ​
 std::bitset<N> bitset1; // 创建一个长度为 N 的 bitset,所有位都被初始化为 0
 std::bitset<N> bitset2(value); // 使用二进制整数 value 初始化一个长度为 N 的 bitset
 std::bitset<N> bitset3(string); // 使用二进制字符串 string 初始化一个长度为 N 的 bitset
 std::bitset<N> bitset4(bitset); // 使用另一个 bitset 初始化一个长度为 N 的 bitset
 ​

其中,value 是一个无符号整数,string 是一个只包含 '0' 和 '1' 的字符串,bitset 是另一个 std::bitset 对象。

下面是 std::bitset 类型的一些常用操作:

  • size() 返回 std::bitset 的长度
  • count() 返回 std::bitset 中值为 1 的位的数量
  • any() 返回 std::bitset 中是否存在值为 1 的位
  • none() 返回 std::bitset 中是否所有位都是 0
  • all() 返回 std::bitset 中是否所有位都是 1
  • test(pos) 返回 std::bitset 中位于 pos 位置的值
  • set(pos) 将 std::bitset 中位于 pos 位置的值设为 1
  • reset(pos) 将 std::bitset 中位于 pos 位置的值设为 0
  • flip(pos) 将 std::bitset 中位于 pos 位置的值取反
  • to_ulong() 返回 std::bitset 转换成的无符号整数值
  • to_ullong() 返回 std::bitset 转换成的无符号长整数值

std::bitset 重载了许多二进制运算符,如 &|^~ 等,使其支持类似于整数类型的位运算操作。例如:

 std::bitset<4> bitset1("1010");
 std::bitset<4> bitset2("0110");
 ​
 std::bitset<4> bitset3 = bitset1 & bitset2; // 按位与运算
 std::bitset<4> bitset4 = bitset1 | bitset2; // 按位或运算
 std::bitset<4> bitset5 = bitset1 ^ bitset2; // 按位异或运算
 std::bitset<4> bitset6 = ~bitset
 ​

还可以使用左移、右移运算符进行位移操作:

 std::bitset<4> bitset1("0101");
 ​
 std::bitset<4> bitset2 = bitset1 << 2; // 左移 2 位,结果为 "010100"
 std::bitset<4> bitset3 = bitset1 >> 1; // 右移 1 位,结果为 "0010"
 ​

std::bitset 还支持 to_string() 方法,将其转换成二进制字符串表示:

 std::bitset<4> bitset1("1010");
 std::string str = bitset1.to_string(); // "1010"
 ​

std::bitset 可以作为容器类型使用,可以使用下标访问、迭代器等方式访问其元素。此外,它还可以通过位集合(bitset set operations)进行集合运算,如并集、交集、补集等,可以使用 std::bitset 的成员函数 set()reset()flip() 进行相应的集合操作。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值