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) Записывает битовое множество
Символы, используемые для единиц и нулей, извлекаются из текущей локали потока вызовом
2) Ведёт себя как функция форматированного ввода. После создания и проверки объекта sentry, который может пропустить начальные пробельные символы, извлекает из x в поток символов os так, как если бы сначала преобразовало его в std::basic_string<CharT,Traits> с помощью to_string(), а затем записало его в os с помощью operator<< (который является функцией форматированного вывода для строк).Символы, используемые для единиц и нулей, извлекаются из текущей локали потока вызовом
std::use_facet<std::ctype<CharT>>(os.getloc()).widen() с аргументами '1' и '0'.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 |
См. также
| выполняет двоичный сдвиг влево и вправо (открытая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/bitset/operator_ltltgtgt2