Namespaces
Variants

std:: bitset

From cppreference.net
Utilities library
Определено в заголовке <bitset>
template < std:: size_t N >
class bitset ;

Шаблон класса bitset представляет собой последовательность фиксированного размера из N битов. Битовые наборы могут обрабатываться стандартными логическими операторами и преобразовываться в строки и целые числа, а также из них. Для целей строкового представления и обозначения направлений операций сдвига последовательность рассматривается как имеющая элементы с наименьшими индексами справа , как в двоичном представлении целых чисел.

bitset удовлетворяет требованиям CopyConstructible и CopyAssignable .

Все функции-члены std::bitset являются constexpr : возможно создавать и использовать объекты std::bitset при вычислении константного выражения.

(начиная с C++23)

Содержание

Параметры шаблона

N - количество битов для выделения памяти

Типы членов

прокси-класс, представляющий ссылку на бит
(класс)

Функции-члены

конструирует bitset
(public member function)
(removed in C++20)
сравнивает содержимое
(public member function)
Доступ к элементам
доступ к конкретному биту
(public member function)
доступ к конкретному биту
(public member function)
проверяет, установлены ли все, любой или ни один из битов в true
(public member function)
возвращает количество битов, установленных в true
(public member function)
Вместимость
возвращает количество битов, которые содержит bitset
(public member function)
Модификаторы
выполняет бинарные операции AND, OR, XOR и NOT
(public member function)
выполняет бинарный сдвиг влево и сдвиг вправо
(public member function)
устанавливает биты в true или заданное значение
(public member function)
устанавливает биты в false
(public member function)
переключает значения битов
(public member function)
Преобразования
возвращает строковое представление данных
(public member function)
возвращает представление данных в виде unsigned long целого числа
(public member function)
(C++11)
возвращает представление данных в виде unsigned long long целого числа
(public member function)

Функции, не являющиеся членами класса

выполняет бинарные логические операции над битовыми наборами
(шаблон функции)
выполняет потоковый ввод и вывод битовых наборов
(шаблон функции)

Вспомогательные классы

Поддержка хеширования для std::bitset
(специализация шаблона класса)

Примечания

Если размер битового набора неизвестен на этапе компиляции или необходимо изменить его размер во время выполнения, вместо него могут использоваться динамические типы, такие как std::vector<bool> или boost::dynamic_bitset<> .

Макрос тестирования возможностей Значение Стандарт Функция
__cpp_lib_constexpr_bitset 202207L (C++23) Более константное выражение std::bitset
__cpp_lib_bitset 202306L (C++26) Взаимодействие std::bitset с std::string_view

Пример

#include <bitset>
#include <cassert>
#include <cstddef>
#include <iostream>
int main()
{
    typedef std::size_t length_t, position_t; // подсказки
    // конструкторы:
    constexpr std::bitset<4> b1;
    constexpr std::bitset<4> b2{0xA}; // == 0B1010
    std::bitset<4> b3{"0011"}; // также может быть constexpr начиная с C++23
    std::bitset<8> b4{"ABBA", length_t(4), /*0:*/'A', /*1:*/'B'}; // == 0B0000'0110
    // bitset может быть выведен в поток:
    std::cout << "b1:" << b1 << "; b2:" << b2 << "; b3:" << b3 << "; b4:" << b4 << '\n';
    // bitset поддерживает побитовые операции:
    b3 |= 0b0100; assert(b3 == 0b0111);
    b3 &= 0b0011; assert(b3 == 0b0011);
    b3 ^= std::bitset<4>{0b1100}; assert(b3 == 0b1111);
    // операции над всем набором:
    b3.reset(); assert(b3 == 0);
    b3.set(); assert(b3 == 0b1111);
    assert(b3.all() && b3.any() && !b3.none());
    b3.flip(); assert(b3 == 0);
    // операции над отдельными битами:
    b3.set(position_t(1), true); assert(b3 == 0b0010);
    b3.set(position_t(1), false); assert(b3 == 0);
    b3.flip(position_t(2)); assert(b3 == 0b0100);
    b3.reset(position_t(2)); assert(b3 == 0);
    // поддерживается оператор индексирования []:
    b3[2] = true; assert(true == b3[2]);
    // другие операции:
    assert(b3.count() == 1);
    assert(b3.size() == 4);
    assert(b3.to_ullong() == 0b0100ULL);
    assert(b3.to_string() == "0100");
}

Вывод:

b1:0000; b2:1010; b3:0011; b4:00000110

Смотрите также

эффективное по памяти динамическое битовое множество
(специализация шаблона класса)
Bit manipulation (C++20) утилиты для доступа, манипуляции и обработки отдельных битов и битовых последовательностей