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

< cpp‎ | utility‎ | bitset

定义于头文件 `<bitset>` |  |
template <class CharT, class Traits, 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, 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` ，如同首先用 to_string() 将它转换成 std::basic_string<CharT,Traits> ，再用 `operator<<` （对字符串是有格式输出函数 (FormattedOutputFunction) ）将它写入 `os` 。为一与零使用的字符，通过以 '1' 和 '0' 为参数调用 std::use_facet<std::ctype<CharT>(os.getloc()).widen() 从当前感染的本地环境获得。
2) 表现为有格式输入函数 (FormattedInputFunction) 。构造并检查 sentry 对象，这可能跳过前导空白符，之后从 `is` 释出至多 `N` 个字符，并存储字符于 bitset `x` 。

释出字符直至

- 已读取 `N` 个字符
- 文件尾发生于 `is` ，或
- 下个字符既非 is.widen('0') 亦非 is.widen('1') 。

若 `N > 0` 且未释出字符，则调用 is.setstate(ios_base::failbit) 。

### 参数

os | - | 要写入的字符流
is | - | 要读取的字符流
x | - | 要读取或写入的 bitset

### 返回值

操作于上的字符流，例如 `os` 或 `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 | 应用于 | 出版时的行为 | 正确行为
--- | --- | --- | ---
LWG 3199 | C++98 | 释出 `std::bitset<0>` 始终设置 `failbit` | 这种释出始终不设置 `failbit`

### 参阅

operator<<=operator>>=operator<<operator>> | 进行二进制左移和右移 (公开成员函数)