std::bitset (tsz. std::bitsets)
std::bitset
egy C++ sablonosztály, amely fix méretű bitmező (bitarray) kezelésére szolgál. Hatékony, mert minden bitet külön tárol és manipulálhatóvá tesz bitműveletekkel.
A bitset
egy adott méretű bináris tömbként működik, amely bitenként hozzáférhető. Mivel a mérete fordítási időben ismert, nem dinamikusan változtatható.
#include <bitset>
#include <iostream>
int main() {
std::bitset<8> bits1; // 00000000
std::bitset<8> bits2(42); // 00101010
std::bitset<8> bits3("1100"); // 00001100
std::cout << bits1 << "\n" << bits2 << "\n" << bits3 << "\n";
}
A bitset
támogatja a bitenkénti hozzáférést és módosítást.
std::bitset<8> bits(5); // 00000101
bits.set(2); // 00000101 -> 00000111 (Beállítja a 2. bitet)
bits.reset(0); // 00000111 -> 00000110 (Lenullázza a 0. bitet)
bits.flip(1); // 00000110 -> 00000100 (Invertálja az 1. bitet)
std::cout << bits; // 00000100
std::cout << bits.test(2); // true (mert a 2. bit be van állítva)
std::cout << bits; // false (mert a 1. bit nincs beállítva)
std::cout << bits.count(); // 1 (beállított bitek száma)
std::cout << bits.to_ulong(); // 4 (binárisból decimálissá)
std::cout << bits.to_string(); // "00000100" (stringgé alakítás)
A bitset
támogatja a bináris műveleteket.
std::bitset<8> a("10101010"), b("01010101");
std::bitset<8> c = a & b; // 00000000
std::bitset<8> d = a | b; // 11111111
std::bitset<8> e = a ^ b; // 11111111
std::bitset<8> f = ~a; // 01010101
A std::bitset
hatékonyan használható bitműveletekhez, például engedélykezeléshez, flag-ek tárolásához és bináris számításokhoz. Ha dinamikus méretre van szükség, a std::vector<bool>
vagy boost::dynamic_bitset
lehet jobb választás.