本文为转载
原文链接
std::bitset 是 C++ 标准库中的一个类,用于表示二进制位序列。它提供了一种方便的方式来处理二进制数据,尤其适用于位运算操作。
类型表示一个固定长度的位序列,每个位都只能是 0 或 1。
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<4> a; //a:0000(默认构造函数)
a[0] = 1;
a[2] = 1;
//a:0101
bitset<7> b("1001101");
for (int i = 0; i < 7; i++)
cout << b[i] << ' ';//输出:1011001