C++ std::bitset
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"