Namespaces
Variants

std:: bitset

From cppreference.net
Utilities library
ヘッダーで定義 <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) 個々のビットとビットシーケンスへのアクセス、操作、処理のためのユーティリティ