转载来源: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
中是否所有位都是 0all()
返回std::bitset
中是否所有位都是 1test(pos)
返回std::bitset
中位于pos
位置的值set(pos)
将std::bitset
中位于pos
位置的值设为 1reset(pos)
将std::bitset
中位于pos
位置的值设为 0flip(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()
进行相应的集合操作。