operator<<,>>(std::bitset)
ja.cppreference.net より
| ヘッダ <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)
に書き込みます。1 と 0 に使用する文字は、
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
を設定しない
|
関連項目
| 二進数の左シフトおよび右シフトを実行します (パブリックメンバ関数) |