Namespaces
Variants

operator<<,>>(std::bitset)

Материал из ru.cppreference.net
 
 
Библиотека утилит
Поддержка языка
Поддержка типов (базовые типы, RTTI)
Макросы для проверки возможностей библиотеки (C++20)
Утилиты программ
Функции с переменным числом аргументов
Поддержка корутин (C++20)
Поддержка контрактов (C++26)
Трёхстороннее сравнение
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Общие утилиты
Операторы отношений (устарело в C++20)
 
 
Определён в заголовке <bitset>
template< class CharT, class Traits, std::size_t N >
std::basic_ostream<CharT, Traits>&
    operator<<( std::basic_ostream<CharT, Traits>& os, const std::bitset<N>& x );
(1)
template< class CharT, class Traits, std::size_t N >
std::basic_istream<CharT, Traits>&
    operator>>( std::basic_istream<CharT, Traits>& is, std::bitset<N>& x );
(2)

Вставляет или извлекает bitset из символьного потока.

1) Записывает bitset x в символьный поток os как если бы сначала преобразовал его в std::basic_string<CharT, Traits> с помощью to_string(), а затем записал его в os с помощью operator<< (который является FormattedOutputFunction для строк).
Символы, используемые для единиц и нулей, получаются из текущей установленной локали вызовом std::use_facet<std::ctype<CharT>>(os.getloc()).widen() с '1' и '0' в качестве аргументов.
2) Ведёт себя как FormattedInputFunction. После конструирования и проверки объекта sentry, который может пропустить начальные пробельные символы, извлекается до N символов из is и сохраняет символы в bitset x.
Символы извлекаются до тех пор, пока выполняется одно из условий:
  • N символов было прочитано,
  • в is достигнут конец файла, или
  • следующий символ не является ни is.widen('0'), ни is.widen('1').
Если N > 0 и символы не извлекаются, вызывается is.setstate(ios_base::failbit).

Параметры

os - символьный поток для записи
is - символьный поток для чтения
x - битовый набор для чтения или записи

Возвращаемое значение

1) os
2) is

Пример

#include <bitset>
#include <iostream>
#include <sstream>
int main()
{
    std::string bit_string = "001101";
    std::istringstream bit_stream(bit_string);
    std::bitset<3> b1;
    bit_stream >> b1; // читает "001", в потоке остается "101"
    std::cout << b1 << '\n';
    std::bitset<8> b2;
    bit_stream >> b2; // читает "101", заполняет 8-битный набор как "00000101"
    std::cout << b2 << '\n';
}

Вывод:

001
00000101

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
LWG 303 C++98 single-byte characters were extracted from
is , but CharT can have multiple bytes
extracts CharT and compares
it with widened '0' and '1'
LWG 396 C++98 the content written by operator << was locale-independent writes widened '0' s and '1' s
LWG 3199 C++98 extracting a std::bitset<0> always sets failbit such extraction never sets failbit

См. также

выполняет двоичный сдвиг влево и сдвиг вправо
(публичная функция-элемент)