operator<<,>>(std::bitset)
Материал из cppreference.com
Определено в заголовочном файле <bitset> | ||
template<class CharT, class Traits, std::size_t N > std::basic_ostream<CharT, Traits>& operator<<(std::basic_ostream<CharT, Traits>& os, | (1) | |
template<class CharT, class Traits, std::size_t N > std::basic_istream<CharT, Traits>& operator>>(std::basic_istream<CharT, Traits>& is, | (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)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++:
Номер | Применён | Поведение в стандарте | Корректное поведение |
---|---|---|---|
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 функция-элемент) |