std::bitset
Определено в заголовке <bitset> | ||
|---|---|---|
template< std::size_t N > class bitset; |
Шаблон класса bitset представляет собой последовательность из N бит фиксированного размера. Над битовыми наборами можно выполнять стандартные логические операции, а также преобразовывать их в строки и целые числа и обратно. Для строкового представления и именования направлений операций сдвига считается, что элементы с наименьшими индексами находятся справа, как и в двоичном представлении целых чисел.
bitset удовлетворяет требованиям CopyConstructible и CopyAssignable.
| Все функции-члены | (начиная с C++23) |
Параметры шаблона
| N | - | число битов, для которых выделяется память |
Типы-члены
| прокси-класс, представляющий ссылку на бит (класс) |
Функции-члены
| создаёт битовый набор (функция-член класса) |
|
|
(удалено в C++20) | сравнивают содержимое (функция-член класса) |
Доступ к элементам |
|
| обращается к указанному биту (функция-член класса) |
|
| обращается к указанному биту (функция-член класса) |
|
проверяют, установлены ли все, некоторые или ни один из битов в значение true (функция-член класса) |
|
возвращает количество битов, установленных в значение true (функция-член класса) |
|
Вместимость |
|
| возвращает количество битов в битовом наборе (функция-член класса) |
|
Модификаторы |
|
| выполняют побитовые операции AND, OR, XOR и NOT (функция-член класса) |
|
| выполняют побитовый сдвиг влево и вправо (функция-член класса) |
|
устанавливает биты в true или указанное значение (функция-член класса) |
|
устанавливает биты в false (функция-член класса) |
|
| инвертирует значения битов (функция-член класса) |
|
Преобразования |
|
| возвращает строковое представление данных (функция-член класса) |
|
| возвращает представление данных в виде целого числа типа unsignedlong (функция-член класса) |
|
|
(C++11) | возвращает представление данных в виде целого числа типа unsignedlonglong (функция-член класса) |
Функции, не являющиеся членами
| выполняют побитовые логические операции над битовыми наборами (шаблон функции) |
|
| выполняют ввод и вывод битовых наборов в поток (шаблон функции) |
Вспомогательные классы
|
(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; // the hints
// constructors:
constexpr std::bitset<4> b1;
constexpr std::bitset<4> b2{0xA}; // == 0B1010
std::bitset<4> b3{"0011"}; // can also be constexpr since C++23
std::bitset<8> b4{"ABBA", length_t(4), /*0:*/'A', /*1:*/'B'}; // == 0B0000'0110
// bitsets can be printed out to a stream:
std::cout << "b1:" << b1 << "; b2:" << b2 << "; b3:" << b3 << "; b4:" << b4 << '\n';
// bitset supports bitwise operations:
b3 |= 0b0100; assert(b3 == 0b0111);
b3 &= 0b0011; assert(b3 == 0b0011);
b3 ^= std::bitset<4>{0b1100}; assert(b3 == 0b1111);
// operations on the whole set:
b3.reset(); assert(b3 == 0);
b3.set(); assert(b3 == 0b1111);
assert(b3.all() && b3.any() && !b3.none());
b3.flip(); assert(b3 == 0);
// operations on individual bits:
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);
// subscript operator[] is supported:
b3[2] = true; assert(true == b3[2]);
// other operations:
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) | средства для доступа к отдельным битам и последовательностям битов, их изменения и обработки |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/bitset