- bitset[meta header]
- std[meta namespace]
- class template[meta id-type]
namespace std {
template <size_t N>
class bitset;
}
<bitset>
ヘッダでは、ビットの固定サイズ配列を計算するためのstd::bitset
クラスを定義する。
std::bitset
は、N
ビットのビット集合を表すクラスである。添字演算子で任意の位置のビット状態を確認でき、文字列と整数値との相互変換が可能であることを特徴とする。
テンプレートパラメータは、以下を意味する:
名前 |
説明 |
対応バージョン |
(constructor) |
コンストラクタ |
|
~bitset() = default |
デストラクタ |
|
bitset& operator=(const bitset&) = default |
代入演算子 |
|
名前 |
説明 |
対応バージョン |
reference |
任意の位置のビットを参照するためのプロキシ型 |
|
名前 |
説明 |
対応バージョン |
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;
}
- [1][link bitset/op_at.md]
- set[link bitset/set.md]
- reset[link bitset/reset.md]
- any()[link bitset/any.md]
1st bit is 1
2nd bit to 1 : 10000111
some bits are 1
and : 10000001
or : 10010111
xor : 10100000