Namespaces
Variants

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

From cppreference.net
Utilities library
定义于头文件 <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 ,其过程如同先使用 to_string() 将其转换为 std:: basic_string < CharT, Traits > ,再通过 operator<< (此为字符串的 格式化输出函数 )将其写入 os
用于表示 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' )
如果 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

参见

执行二进制左移和右移操作
(公开成员函数)