Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Các thú vị về bitset trong C++


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 = 1
  • b.reset() – Đặt tất cả bit = 0
  • b.flip() – Đảo ngược tất cả bit
  • b.count() – Đếm số bit 1
  • b.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.