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

来自cppreference.com
< cpp‎ | utility‎ | bitset
 
 
工具库
通用工具
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中弃用)
整数比较函数
(C++20)(C++20)(C++20)
(C++20)
swap 与类型运算
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
常用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
初等字符串转换
(C++17)
(C++17)
 
 
在标头 <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

返回值

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

参阅

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