Пространства имён
Варианты
Действия

std::bitset

Материал из cppreference.com
< cpp‎ | utility
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования (C++20)
bitset
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
std::bitset
Типы элементы
Функции-элементы
Доступ к элементам
Ёмкость
Модификаторы
Преобразования
Функции, не являющиеся элементами
Вспомогательные классы
(C++11)
 
Определено в заголовочном файле <bitset>
template< std::size_t N >
class bitset;

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

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

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

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

Содержание

[править] Аргумент шаблона

N количество битов, для которых выделить память

[править] Тип-элемент

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

[править] Функции-элементы

создаёт bitset
(public функция-элемент) [править]
(удалено в C++20)
сравнивает содержимое
(public функция-элемент) [править]
Доступ к элементам
обращается к определённому биту
(public функция-элемент) [править]
доступ к определённому биту
(public функция-элемент) [править]
проверяет, установлены ли все, какие-либо или ни один из битов в true
(public функция-элемент) [править]
возвращает количество битов, установленных в true
(public функция-элемент) [править]
Ёмкость
возвращает количество битов, которые содержит набор битов
(public функция-элемент) [править]
Модификаторы
выполняет бинарное И, ИЛИ, исключающее ИЛИ и НЕ
(public функция-элемент) [править]
выполняет двоичный сдвиг влево и вправо
(public функция-элемент) [править]
устанавливает биты в true или в заданное значение
(public функция-элемент) [править]
устанавливает биты в false
(public функция-элемент) [править]
инвертирует значения битов
(public функция-элемент) [править]
Преобразования
возвращает строковое представление данных
(public функция-элемент) [править]
возвращает целочисленное представление данных в типе unsigned long
(public функция-элемент) [править]
(C++11)
возвращает целочисленное представление данных в типе unsigned long long
(public функция-элемент) [править]

[править] Функции, не являющиеся элементами

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

[править] Вспомогательные классы

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

[править] Примечание

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

Макрос тест функциональности
__cpp_lib_constexpr_bitset 202207L (C++23) Ещё один constexpr 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
 
    // битовые наборы можно распечатать в поток:
    std::cout << "b1:" << b1 << "; b2:" << b2 << "; b3:" << b3 << "; b4:" << b4 << '\n';
 
    // битовый набор поддерживает побитовые операции:
    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);
 
    // поддерживается operator[] индексации:
    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

[править] Смотрите также

компактный динамический битовый набор
(специализация шаблона класса) [править]
Манипуляции битами (C++20) утилиты для доступа, управления и обработки отдельных битов и битовых последовательностей