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