Ce face std::bitset
std::bitset<N> ține exact N valori de tip adevărat/fals, împachetate câte una pe bit. Poți accesa un bit cu b[i] (bitul 0 este cel din dreapta, cel mai puțin semnificativ) sau cu test(i), care verifică poziția.
Funcții utile: set(i), reset(i), flip(i) (fără argument, pe toți biții), count() (câți biți sunt 1), any(), none(), all(), to_string() și to_ulong(). Operatorii &, |, ^, ~, <<, >> funcționează pe tot șirul.
Este potrivit pentru seturi mici de opțiuni (drepturi, zile ale săptămânii) și pentru a afișa un număr în binar. Dacă numărul de biți se stabilește la rulare, folosește std::vector<bool>.
Parametri
| Parametru | Descriere |
|---|---|
N |
Numărul de biți (constantă la compilare). |
numar / "0101" |
Valoarea inițială: un număr întreg sau un text din 0 și 1. |
Ce returnează
Un obiect bitset. count() returnează numărul de biți setați, test(i) un bool.
Exemple
Exemplul 1: Un număr în binar
#include <bitset>
#include <print>
int main() {
std::bitset<8> b(42);
std::println("42 în binar: {}", b.to_string());
std::println("Biți de 1: {}", b.count());
std::println("Bitul 1: {}, bitul 3: {}", b.test(1), b.test(3));
std::bitset<8> din_text("11110000");
std::println("Ca număr: {}", din_text.to_ulong());
std::println("AND: {}", (b & din_text).to_string());
}
Rezultat
42 în binar: 00101010
Biți de 1: 3
Bitul 1: true, bitul 3: true
Ca număr: 240
AND: 00100000
Exemplul 2: Zilele de program ale unui magazin
#include <array>
#include <bitset>
#include <print>
#include <string_view>
int main() {
constexpr std::array<std::string_view, 7> zile{"L", "Ma", "Mi", "J", "V", "S", "D"};
std::bitset<7> deschis;
deschis.set(); // toate zilele
deschis.reset(6); // închis duminica
deschis.flip(5); // și sâmbăta
for (std::size_t i = 0; i < zile.size(); ++i) {
std::print("{}:{} ", zile[i], deschis.test(i) ? "da" : "nu");
}
std::println();
std::println("Deschis {} zile pe săptămână", deschis.count());
}
Rezultat
L:da Ma:da Mi:da J:da V:da S:nu D:nu
Deschis 5 zile pe săptămână
Greșeli frecvente
- Te aștepți ca
b[0]să fie primul caracter dinto_string(). Bitul 0 este ultimul caracter (cel din dreapta). - Folosești
b[i]cu unimai mare sau egal cu N: comportament nedefinit.b.test(i)verifică și aruncăstd::out_of_range.
Comenzi înrudite
std::array: Tablou cu dimensiune fixă, cunoscută la compilare, cu interfața unui container (size, at, begin, end).std::vector: Tabloul dinamic din C++: ține elementele unul după altul în memorie și își mărește singur dimensiunea.