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;
}
xxxxxxxxxx
#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);
出力
1st bit is 1
2nd bit to 1 : 10000111
some bits are 1
and : 10000001
or : 10010111
xor : 10100000