operator<<,>> (std::bitset)
From cppreference.net
|
定义于头文件
<bitset>
|
||
|
template
<
class
CharT,
class
Traits,
std::
size_t
N
>
std::
basic_ostream
<
CharT, Traits
>
&
|
(1) | |
|
template
<
class
CharT,
class
Traits,
std::
size_t
N
>
std::
basic_istream
<
CharT, Traits
>
&
|
(2) | |
在字符流中插入或提取位集。
1)
将位集
x
写入字符流
os
,其过程如同先使用
to_string()
将其转换为
std::
basic_string
<
CharT, Traits
>
,再通过
operator<<
(此为字符串的
格式化输出函数
)将其写入
os
。
用于表示 1 和 0 的字符通过调用当前注入的区域设置的 std:: use_facet < std:: ctype < CharT >> ( os. getloc ( ) ) . widen ( ) 并传入参数 '1' 和 '0' 来获取。
用于表示 1 和 0 的字符通过调用当前注入的区域设置的 std:: use_facet < std:: ctype < CharT >> ( os. getloc ( ) ) . widen ( ) 并传入参数 '1' 和 '0' 来获取。
2)
表现为
格式化输入函数
。构造并检查哨兵对象后(可能会跳过前导空白字符),从
is
中提取最多
N
个字符,并将这些字符存储到位集
x
中。
字符提取将持续直到满足以下任一条件:
字符提取将持续直到满足以下任一条件:
- 已读取 N 个字符
- is 中遇到文件结束
- 下一个字符既不是 is. widen ( '0' ) 也不是 is. widen ( '1' )
目录 |
参数
| 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
|
参见
|
执行二进制左移和右移操作
(公开成员函数) |