operator<<,>>(std::bitset)
来自cppreference.com
| 在标头 <bitset> 定义
|
||
| |
(1) | |
| |
(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) 。构造并检查哨兵对象,这可能会跳过前导空白符,之后从
提取字符直到以下任一情况发生:
is 提取最多 N 个字符,并将字符存储到 bitset x。提取字符直到以下任一情况发生:
- 已读取
N个字符 is中遇到了文件尾- 下个字符不是
is.widen('0')或is.widen('1')
如果 N > 0 且没有提取任何字符,那么就会调用 is.setstate(ios_base::failbit)。
参数
| os | - | 要写入的字符流 |
| is | - | 要读取的字符流 |
| x | - | 要读取或写入的 bitset
|
返回值
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
|
参阅
| 进行二进制左移和右移 (公开成员函数) |