C++ มีคอนเทนเนอร์ใน STL ชื่อ bitset ใช้ทำงานกับข้อมูลระดับบิต (bit level) คือแต่ละบิตของตัวแปร (การแปลงเป็นเลขฐานสอง)
1. bitset เหมือนสตริง
bitset เป็นคอนเทนเนอร์ของบิต (มีแค่ 0 และ 1) สร้าง bitset ได้จากชุดบิตที่กำหนดโดยดัชนีเริ่มต้นและจำนวนสมาชิก
ตัวอย่าง: ต้องการ 4 บิตเริ่มจากดัชนี 2 ของสตริงบิต "01001110" จะได้ "0011" ต่อท้าย bitset 8 บิตจะได้ "00000011"
ตัวอย่าง
#include <bitset>
#include <string>
#include <iostream>
int main() {
std::string bit_string = "10010110";
std::bitset<8> b1(bit_string, 1, 4);
std::cout << b1 << '\n';
return 0;
}
ผลลัพธ์
00000010
2. สร้าง bitset จากสตริง
ถ้ามีสตริงที่มีค่า 2 แบบ ใช้สร้าง bitset โดยแปลงค่าเหล่านั้นเป็น 0/1
ตัวอย่าง: สตริง "xyxxyyx" กำหนด x=0, y=1 → bitset "0100110"
Constructor: bitset(str, offSet, size, zeroVal, oneVal)
- str — สตริงต้นทาง
- offSet — ดัชนีเริ่มต้นในสตริง
- size — ขนาด bitset ที่จะสร้าง
- zeroVal — ตัวอักษรที่แทน 0
- oneVal — ตัวอักษรที่แทน 1
ตัวอย่าง
#include <bitset>
#include <string>
#include <iostream>
using namespace std;
int main() {
string bitstr = "xyxxyyyx";
bitset<8> bits(bitstr, 0, bitstr.size(), 'x', 'y');
cout << "The bitset is : " << bits << '\n';
}
ผลลัพธ์
The bitset is: 01001110
3. แปลง bitset เป็นสตริง
ฟังก์ชัน to_string() แปลง bitset เป็นสตริง ความยาวเท่ากัน ลำดับเหมือนกัน
ตัวอย่าง: "01010100" → "01010100" สามารถเปลี่ยน 0 และ 1 เป็นตัวอักษรอื่นได้ผ่านพารามิเตอร์
ตัวอย่าง
#include <iostream>
#include <bitset>
using namespace std;
int main() {
bitset<8> b(19);
cout<<"The value of the bitset is : "<<b<<endl;
cout<<"The string conversion of the bitset is : "<<b.to_string()<<endl;
cout<<"The string conversion by replacing 0 with T and 1 with P is : ";
cout<< b.to_string('T', 'P')<<endl;
}
ผลลัพธ์
The value of bitset is : 00010011 The string conversion of bitset is : 00010011 string conversion by replacing 0 with T and 1 with P is : TTTPTTPP
ยังมีอีกหลายการดำเนินการกับ bitset และ bitwise operators ที่ใช้งานได้