std::bitset
| Определено в заголовочном файле <bitset>
|
||
template< std::size_t N > class bitset; |
||
Шаблонный класс bitset представляет последовательность из N бит фиксированного размера. Наборами битов можно управлять с помощью стандартных логических операций и преобразовывать их в строки и целые числа. В целях строкового представления и именования направлений для операций сдвига последовательность считается имеющей элементы с наименьшим индексом справа, как в двоичном представлении целых чисел.
bitset соответствует требованиям CopyConstructible и CopyAssignable.
|
Все функции-элементы |
(начиная с 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 функция-элемент) |
Функции, не являющиеся элементами
| выполняют бинарные логические операции над наборами битов (шаблон функции) | |
| выполняют потоковый ввод и вывод наборов битов (шаблон функции) |
Вспомогательные классы
(C++11) |
поддержка хэширования для 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) | утилиты для доступа, управления и обработки отдельных битов и битовых последовательностей |