最終更新日時:
が更新

履歴 編集

class template
<bitset>

std::bitset

namespace std {
  template <size_t N>
  class bitset;
}

概要

<bitset>ヘッダでは、ビットの固定サイズ配列を計算するためのstd::bitsetクラスを定義する。

std::bitsetは、Nビットのビット集合を表すクラスである。添字演算子で任意の位置のビット状態を確認でき、文字列と整数値との相互変換が可能であることを特徴とする。

テンプレートパラメータは、以下を意味する:

  • N : ビット集合のビット数

メンバ関数

構築・破棄

名前 説明 対応バージョン
(constructor) コンストラクタ
~bitset() = default デストラクタ
bitset& operator=(const bitset&) = default 代入演算子

集合演算

名前 説明 対応バージョン
operator&= 論理積の複合演算
operator|= 論理和の複合演算
operator^= 排他的論理和の複合演算
operator<<= 左シフトの複合演算
operator>>= 右シフトの複合演算
set 任意の位置のビットを設定する
reset 任意の位置のビットを0にする
operator~ ビットを反転させる
flip ビットを反転させる

要素アクセス

名前 説明 対応バージョン
operator[] 任意の位置のビットにアクセスする
count 1になっているビットの数を取得する
size ビット数を取得する
test 任意の位置のビットが1になっているかを判定する
all 全てのビットが1になっているかを判定する C++11
any いずれかのビットが1になっているかを判定する
none 全てのビットが0になっているかを判定する
to_ulong unsigned long型に変換する
to_ullong unsigned long long型に変換する C++11
to_string 文字列に変換する
operator== 等値比較
operator!= 非等値比較
operator<< 左シフト
operator>> 右シフト

メンバ型

名前 説明 対応バージョン
reference 任意の位置のビットを参照するためのプロキシ型

非メンバ関数

名前 説明 対応バージョン
operator& 論理積
operator| 論理和
operator^ 排他的論理和
operator>> ストリームから入力
operator<< ストリームに出力

ハッシュサポート

名前 説明 対応バージョン
template <class T> struct hash; hashクラスの先行宣言 C++11
template <size_t N> struct hash<bitset<N>>; hashクラスのbitsetに対する特殊化 C++11

#include <iostream>
#include <bitset>

int main()
{
  // 整数から8ビットのビット集合を構築
  std::bitset<8> bs1(131uL); // 10000011

  // 文字列から8ビットのビット集合を構築
  std::bitset<8> bs2("10000011");

  // 1ビット目が1かを判定
  if (bs1[1]) {
    std::cout << "1st bit is 1" << std::endl;
  }

  // 2ビット目を1にする
  bs1.set(2);
  std::cout << "2nd bit to 1 : " << bs1 << std::endl;

  // 2ビット目を0に戻す
  bs1.reset(2);

  // いずれかのビットが1かを判定
  if (bs1.any()) {
    std::cout << "some bits are 1" << std::endl;
  }

  // 論理演算
  std::bitset<8> and_bits = bs1 & std::bitset<8>("10000001"); // 論理積
  std::bitset<8> or_bits  = bs1 | std::bitset<8>("00010100"); // 論理和
  std::bitset<8> xor_bits = bs1 ^ std::bitset<8>("00100011"); // 排他的論理和

  std::cout << "and : " << and_bits << std::endl;
  std::cout << "or  : " << or_bits << std::endl;
  std::cout << "xor : " << xor_bits << std::endl;
}

出力

1st bit is 1
2nd bit to 1 : 10000111
some bits are 1
and : 10000001
or  : 10010111
xor : 10100000

参照