Spec-Zone.ru › C++

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

Определено в заголовочном файле <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<< (который является функцией форматированного вывода для строк).
Символы, используемые для единиц и нулей, извлекаются из текущей локали потока вызовом std::use_facet<std::ctype<CharT>>(os.getloc()).widen() с аргументами '1' и '0'.
2) Ведёт себя как функция форматированного ввода. После создания и проверки объекта sentry, который может пропустить начальные пробельные символы, извлекает из is не более N символов и сохраняет их в битовом множестве 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; // reads "001", stream still holds "101"
    std::cout << b1 << '\n';
    
    std::bitset<8> b2;
    bit_stream >> b2; // reads "101", populates the 8-bit set as "00000101"
    std::cout << b2 << '\n';
}

Вывод:

001
00000101

Отчёты об ошибках

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

DR Применено к Опубликованное поведение Правильное поведение
LWG 303 C++98 извлекались однобайтовые символы из
is, но CharT может состоять из нескольких байтов
извлекает CharT и сравнивает
его с расширенными '0' и '1'
LWG 396 C++98 содержимое, записываемое operator<<, не зависело от локали записывает расширенные символы '0' и '1'
LWG 3199 C++98 извлечение std::bitset<0> всегда устанавливает failbit такое извлечение никогда не устанавливает failbit

См. также

operator<<=operator>>=operator<<operator>>
выполняет двоичный сдвиг влево и вправо
(открытая функция-член)

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

Spec-Zone.ru

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