定义于头文件 <bitset>
|   template< std::size_t N >  | 
类模板 bitset 表示一个 N 位的固定大小序列。可以用标准逻辑运算符操作位集,并将它与字符串和整数相互转换。
bitset 满足可复制构造 (CopyConstructible) 及可复制赋值 (CopyAssignable) 的要求。
模板形参
| N | - | 要为 bitset 分配存储的位数 | 
成员类型
|   reference  | 表示到一个位的引用的代理类 (类)  | 
成员函数
比较其内容
operator==,!=(std::bitset) 
|   bool operator==( const bitset<N>& rhs ) const;  | (1) | |
|   bool operator!=( const bitset<N>& rhs ) const;  | (2) | 
 1) 若 *this 与 rhs 中的所有位相等则返回 true 。
2) 若 *this 与 rhs 中的任何位不相等则返回 true 。
参数
| rhs | - | 要比较的 bitset | 
返回值
1) 若 *this 中每位都等于 rhs 中对应位的值则为 true ,否则为 false
2) 若 !(*this == rhs) 则为 true ,否则为 false
容量
返回位集能保有的位数大小
std::bitset<N>::size 
|   std::size_t size() const;  | (C++11 前) | |
|   constexpr std::size_t size() const noexcept;  | (C++11 起) | 
返回 bitset 所能保有的位数。
参数
(无)
返回值
bitset 所能保有的位数,即模板形参 N
转换
返回数据的字符串表示
std::bitset<N>::to_string 
| template<      class CharT,  | (C++11 前) | |
| template<      class CharT = char,  | (C++11 起) | 
 转换 bitset 的内容为 string 。用 zero 表示拥有值 false 的位,以 one 表示拥有值 true 的位。
产生的字符串含 N 个字符,其首字符对应最末(第 N-1th )位而其尾字符对应首位。
参数
| zero | - | 用于表示 false 的字符 | 
| one | - | 用于表示 true 的字符 | 
返回值
转换出的字符串
异常
可能从 std::string 构造函数抛出 std::bad_alloc 。
返回数据的 unsigned long 整数表示
std::bitset<N>::to_ulong 
|   unsigned long to_ulong() const  | 
转换 bitset 的内容为 unsigned long 整数。
bitset 的首位对应数的最低位,而尾位对应最高位。
参数
(无)
返回值
转换出的整数
异常
若值不能以 unsigned long 表示则抛出 std::overflow_error 。
返回数据的 unsigned long long 整数表示
std::bitset<N>::to_ullong 
|   unsigned long long to_ullong() const  | (C++11 起) | 
转换 bitset 的内容为 unsigned long long 整数。
bitset 的首位对应数的最低位,而尾位对应最高位。
参数
(无)
返回值
转换出的整数
异常
若值不能以 unsigned long long 表示则为 std::overflow_error 。
辅助类
std::bitset 的散列支持
std::hash (std::bitset) 
|   template<size_t N> struct hash<bitset<N>>;  | (C++11 起) | 
std::hash 对 std::bitset<N> 的模板特化允许用户获得 std::bitset<N> 类型的对象的哈希。
调用示例
#include <iostream>
#include <bitset>
#include <string>
#include <sstream>
#include <limits>
template<size_t _Nb>
void printBitset(const std::string &name, const std::bitset<_Nb> &bitset)
{
    std::cout << name << ":  ";
    for (size_t index = 0; index < bitset.size(); index++)
    {
        std::cout << bitset[index] << " ";
    }
    std::cout << std::endl;
}
int main()
{
    std::cout << std::boolalpha;
    //转换 bitset 的内容为 string 。用 zero 表示拥有值 false 的位,以 one 表示拥有值 true 的位。
    //产生的字符串含 N 个字符,其首字符对应最末(第 N-1th )位而其尾字符对应首位。
    std::bitset<8> bitset1(123);
    std::cout << "bitset1.to_string():          " << bitset1.to_string() << std::endl;
    std::cout << "bitset1.to_string('*'):       " << bitset1.to_string('*') << std::endl;
    std::cout << "bitset1.to_string('X','Y'):   " << bitset1.to_string('X', 'Y') << std::endl;
    std::cout << std::endl;
    //转换 bitset 的内容为 unsigned long 整数。
    //bitset 的首位对应数的最低位,而尾位对应最高位。
    for (unsigned long i = 0; i < 8; ++i)
    {
        std::bitset<5> b(i);
        std::bitset<5> b_inverted = ~b;
        std::cout << i << '\t';
        std::cout << b << '\t';
        std::cout << b_inverted << '\t';
        std::cout << b_inverted.to_ulong() << '\n';
    }
    std::cout << std::endl;
    //转换 bitset 的内容为 unsigned long long 整数。
    //bitset 的首位对应数的最低位,而尾位对应最高位。
    std::bitset<std::numeric_limits<unsigned long long>::digits> bitset3(
        0x123456789abcdef0LL
    );
    std::cout << bitset3 << "  " << std::hex << bitset3.to_ullong() << std::endl;
    bitset3.flip();
    std::cout << bitset3 << "  " << bitset3.to_ullong() << std::endl;
    std::cout << std::endl;
    //1) 若 *this 与 rhs 中的所有位相等则返回 true 。
    std::bitset<8> bitset5("10101010");
    std::bitset<8> bitset6(bitset5);
    std::bitset<8> bitset7("01010101");
    std::cout << "bitset5:              " << bitset5 << std::endl;
    std::cout << "bitset6:              " << bitset6 << std::endl;
    std::cout << "bitset7:              " << bitset7 << std::endl;
    //1) 若 *this 与 rhs 中的所有位相等则返回 true 。
    //2) 若 *this 与 rhs 中的任何位不相等则返回 true 。
    std::cout << "bitset5 == bitset6    " << (bitset5 == bitset6) << std::endl;
    std::cout << "bitset5 != bitset6    " << (bitset5 != bitset6) << std::endl;
    std::cout << "bitset5 == bitset7    " << (bitset5 == bitset7) << std::endl;
    std::cout << "bitset5 != bitset7    " << (bitset5 != bitset7) << std::endl;
    std::cout << std::endl;
    //返回 bitset 所能保有的位数。
    std::cout << "bitset5.size():       " << bitset5.size() << std::endl;
    std::cout << "bitset6.size():       " << bitset6.size() << std::endl;
    std::cout << "bitset7.size():       " << bitset7.size() << std::endl;
    std::cout << std::endl;
    //std::hash 对 std::bitset<N> 的模板特化允许用户获得 std::bitset<N> 类型的对象的哈希。
    std::hash<std::bitset<8>> hash_fn;
    size_t hash1 = hash_fn(bitset5);
    size_t hash2 = hash_fn(bitset6);
    size_t hash3 = hash_fn(bitset7);
    std::cout << "std::hash<bitset5>:   " << hash1 << std::endl;
    std::cout << "std::hash<bitset6>:   " << hash2 << std::endl;
    std::cout << "std::hash<bitset7>:   " << hash3 << std::endl;
    return 0;
} 
输出




















