Namespaces
Variants

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

ja.cppreference.net より
 
 
ユーティリティライブラリ
言語サポート
型サポート (基本型、RTTI)
ライブラリ機能テストマクロ (C++20)
プログラムユーティリティ
可変長引数関数
コルーチンサポート (C++20)
契約サポート (C++26)
三方比較
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

汎用ユーティリティ
関係演算子 (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)



 
 
ヘッダ <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 );
で定義
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 );
(1)

(2)

文字ストリームとの間で bitset を挿入または抽出します。 1)x bitset os を、まず std::basic_string<CharT, Traits> を使って to_string() で文字列に変換し、次にその文字列を os に operator<< を使って書き込む (これは文字列に対する FormattedOutputFunction です) のと同様に、文字ストリーム
に書き込みます。1 と 0 に使用する文字は、std::use_facet<std::ctype<CharT>>(os.getloc()).widen() を '1' および '0' を引数として呼び出すことにより、現在設定されているロケールから取得されます。
2) FormattedInputFunction として動作します。先頭の空白をスキップする可能性のある sentry オブジェクトを構築して確認した後、N から最大 is 文字を抽出し、その文字を bitset 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++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
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 を設定しない

関連項目

二進数の左シフトおよび右シフトを実行します
(パブリックメンバ関数)