<bitset>
是 C++ 标准库的一部分,提供了一种用来处理固定大小序列的位的数据结构,这种数据结构称为 bitset
。
1. 创建 bitset
创建 bitset
的常见方式是通过构造函数,传入一个整数或字符串。例如:
std::bitset<8> b1(42); // 从整数创建,结果是 00101010
std::bitset<8> b2("1101"); // 从字符串创建,结果是 00001101
注意,如果从字符串创建,bitset
会从字符串的右边开始读取,直到读取完整个字符串或已经填满所有位。
2. 访问和修改位
你可以使用 []
操作符来访问或修改 bitset
的位。例如:
std::bitset<8> b("1101");
std::cout << b[0]; // 输出 1
b[1] = 0; // 将第二位设置为 0
3. 位操作
bitset
支持所有常见的位操作,包括位与(&
)、位或(|
)、位异或(^
)和位非(~
)。例如:
std::bitset<4> b1("1100");
std::bitset<4> b2("1010");
std::cout << (b1 & b2); // 输出 1000
4. 其他操作
bitset
还提供了一些其他有用的操作,例如 count()
(返回置位(值为1)的位数)、size()
(返回位的总数)、flip()
(翻转所有位)、set()
(将所有位设置为1)、reset()
(将所有位设置为0)等。
std::bitset<8> b("11010010");
std::cout << b.count(); // 输出 4
std::cout << b.size(); // 输出 8
b.flip(); // 翻转所有位
b.set(); // 将所有位设置为 1
b.reset(); // 将所有位设置为 0
5. 转换
你可以使用 to_ulong()
和 to_ullong()
方法将 bitset
转换为无符号长整数或无符号长长整数。使用 to_string()
方法可以将 bitset
转换为字符串。
std::bitset<8> b("11010010");
std::cout << b.to_ulong(); // 输出 210
std::cout << b.to_string(); // 输出 11010010
注意,如果 bitset
的值太大,不能用无符号长整数或无符号长长整数表示,那么 to_ulong()
和 to_ullong()
会抛出 std::overflow_error
异常。
bitset
是一个非常方便的工具,可以让你更容易地处理位操作