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