operator<<,>>(std::bitset)
Материал из ru.cppreference.net
| Определён в заголовке <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
|
См. также
| выполняет двоичный сдвиг влево и сдвиг вправо (публичная функция-элемент) |