Spec-Zone.ru › C++

std::bitset

Определено в заголовке <bitset>
template< std::size_t N >
class bitset;

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

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

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

(с C++23)

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

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

Типы членов

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

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

(конструктор)
создает битовое множество
(публичная функция-член)
operator==operator!=
(удалено в C++20)
сравнивает содержимое
(публичная функция-член)
Доступ к элементам
operator[]
доступ к определенному биту
(публичная функция-член)
test
доступ к определенному биту
(публичная функция-член)
allanynone
проверяет, установлены ли все, некоторые или ни один из битов в значение true
(публичная функция-член)
count
возвращает количество битов, установленных в true
(публичная функция-член)
Емкость
size
возвращает количество битов, которое хранит битовое множество
(публичная функция-член)
Модификаторы
operator&=operator|=operator^=operator~
выполняет побитовое И, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ и НЕ
(публичная функция-член)
operator<<=operator>>=operator<<operator>>
выполняет сдвиг влево и вправо
(публичная функция-член)
set
устанавливает биты в true или заданное значение
(публичная функция-член)
reset
устанавливает биты в false
(публичная функция-член)
flip
инвертирует значения битов
(публичная функция-член)
Преобразования
to_string
возвращает строковое представление данных
(публичная функция-член)
to_ulong
возвращает целое число типа unsigned long в представлении данных
(публичная функция-член)
to_ullong
(C++11)
возвращает целое число типа unsigned long long в представлении данных
(публичная функция-член)

Внешние функции

operator&operator|operator^
выполняет побитовые логические операции над битовыми множествами
(шаблон функции)
operator<<operator>>
выполняет ввод и вывод битовых множеств в поток
(шаблон функции)

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

std::hash<std::bitset>
(C++11)
поддержка хэширования для std::bitset
(специализация шаблона класса)

Примечания

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

Макрос проверки функций Значение Std Функция
__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; // 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

См. также

vector<bool>
эффективное с точки зрения памяти динамическое битовое множество
(специализация шаблона класса)
Обработка битов (C++20) средства для доступа к, обработки и работы с отдельными битами и последовательностями битов

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility/bitset

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API