Namespaces
Variants

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< std::size_t N >
class bitset;

で定義bitsetクラステンプレート N は、固定サイズの ビット列を表します。ビットセットは標準の論理演算子で操作でき、文字列や整数との間で変換できます。文字列表現とシフト操作の方向の命名の目的のために、このシーケンスは、整数の二進表現と同様に、最も低いインデックスの要素が 右側

bitset にあるものと見なされます。 は CopyConstructible と CopyAssignable

の要件を満たします。 std::bitset のすべてのメンバ関数は constexpr です。つまり、定数式の評価内で std::bitset オブジェクトを作成および使用することが可能です。

(C++23 以降)

テンプレートパラメータ

N - ストレージ割り当てのためのビット数

メンバー型

ビットへの参照を表すプロキシクラス
(クラス)

メンバー関数

bitsetを構築する
(public member function)
(removed in C++20)
内容を比較する
(public member function)
要素アクセス
特定のビットにアクセスする
(public member function)
特定のビットにアクセスする
(public member function)
すべてのビット、いずれかのビット、またはビットが設定されていないかチェックする
(public member function)
設定されているビットの数を返す
(public member function)
容量
bitsetが保持するビット数を返す
(public member function)
変更操作
二項AND、OR、XOR、NOTを実行する
(public member function)
二項左シフトと右シフトを実行する
(public member function)
ビットを設定する
(public member function)
ビットをリセットする
(public member function)
ビットの値を反転する
(public member function)
変換
データの文字列表現を返す
(public member function)
データの符号なしlong整数表現を返す
(public member function)
(C++11)
データの符号なしlong long整数表現を返す
(public member function)

非メンバー関数

ビットセットに対する二項論理演算を実行する
(関数テンプレート)
ビットセットのストリーム入出力を実行する
(関数テンプレート)

ヘルパークラス

std::bitset のハッシュサポート
(クラステンプレートの特殊化)

注記

ビットセットのサイズがコンパイル時に不明な場合、または実行時にサイズを変更する必要がある場合は、動的な型である std::vector<bool> または boost::dynamic_bitset<> を代わりに使用できます。

機能テスト マクロ 値 標準 機能
__cpp_lib_constexpr_bitset 202207L (C++23) よりconstexprな std::bitset
__cpp_lib_bitset 202306L (C++26) std::bitset と std::string_view の連携

例

#include <bitset>
#include <cassert>
#include <cstddef>
#include <iostream>
int main()
{
    typedef std::size_t length_t, position_t; // ヒント
    // コンストラクタ:
    constexpr std::bitset<4> b1;
    constexpr std::bitset<4> b2{0xA}; // == 0B1010
    std::bitset<4> b3{"0011"}; // C++23以降はconstexprにも可能
    std::bitset<8> b4{"ABBA", length_t(4), /*0:*/'A', /*1:*/'B'}; // == 0B0000'0110
    // bitsetはストリームへ出力可能:
    std::cout << "b1:" << b1 << "; b2:" << b2 << "; b3:" << b3 << "; b4:" << b4 << '\n';
    // bitsetはビット単位演算をサポート:
    b3 |= 0b0100; assert(b3 == 0b0111);
    b3 &= 0b0011; assert(b3 == 0b0011);
    b3 ^= std::bitset<4>{0b1100}; assert(b3 == 0b1111);
    // セット全体に対する操作:
    b3.reset(); assert(b3 == 0);
    b3.set(); assert(b3 == 0b1111);
    assert(b3.all() && b3.any() && !b3.none());
    b3.flip(); assert(b3 == 0);
    // 個々のビットに対する操作:
    b3.set(position_t(1), true); assert(b3 == 0b0010);
    b3.set(position_t(1), false); assert(b3 == 0);
    b3.flip(position_t(2)); assert(b3 == 0b0100);
    b3.reset(position_t(2)); assert(b3 == 0);
    // 添字演算子[]をサポート:
    b3[2] = true; assert(true == b3[2]);
    // その他の操作:
    assert(b3.count() == 1);
    assert(b3.size() == 4);
    assert(b3.to_ullong() == 0b0100ULL);
    assert(b3.to_string() == "0100");
}

出力:

b1:0000; b2:1010; b3:0011; b4:00000110

関連項目

スペース効率の高い動的ビットセット
(クラステンプレートの特殊化)
ビット操作 (C++20) 個々のビットとビットシーケンスへのアクセス、操作、処理のためのユーティリティ