Namespaces
Variants

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

From cppreference.net
Utilities library
Определено в заголовке <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)

Вставляет или извлекает битовый набор из символьного потока.

1) Записывает битовый набор 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 . После создания и проверки сторожевого объекта, который может пропускать ведущие пробельные символы, извлекает до N символов из is и сохраняет символы в битовом наборе 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

Смотрите также

выполняет двоичный сдвиг влево и сдвиг вправо
(public member function)