bitset – Container trong STL C++ để thao tác ở cấp độ bit (chuỗi bit có kích thước cố định tại compile-time).
1. Khởi tạo từ chuỗi con (substring)
#include <bitset>
#include <string>
#include <iostream>
using namespace std;
int main() {
string bit_string = "10010110";
// Lấy 4 bit từ vị trí 1: "0010" → bitset<8> = 00000010
bitset<8> b1(bit_string, 1, 4);
cout << b1 << '\n'; // 00000010
return 0;
}
2. Khởi tạo từ chuỗi với ký tự tùy chỉnh
string s = "xyxxyyyx"; // x→0, y→1, từ vị trí 0, độ dài 8 bitset<8> b2(s, 0, s.size(), 'x', 'y'); cout << b2 << '\n'; // 01001110
3. Chuyển bitset sang string
bitset<8> b(19); // 00010011
cout << b.to_string() << '\n'; // "00010011"
cout << b.to_string('T', 'P') << '\n'; // "TTTPTTPP" (0→T, 1→P)
Các thao tác hữu ích khác
b.set()– Đặt tất cả bit = 1b.reset()– Đặt tất cả bit = 0b.flip()– Đảo ngược tất cả bitb.count()– Đếm số bit 1b.test(pos)– Kiểm tra bit tại vị tríb.any(), b.none(), b.all()– Kiểm tra tồn tại/không có/tất cả bit 1- Toán tử bit:
& | ^ ~ << >>
Lưu ý
Kích thước bitset phải là hằng số compile-time. Cần kích thước động → dùng vector<bool> hoặc boost::dynamic_bitset.