# std::bitset<N>::bitset

< cpp‎ | utility‎ | bitset

| (1) |
bitset(); |  | (C++11 前)
constexpr bitset() noexcept; |  | (C++11 起)
| (2) |
bitset( unsigned long val ); |  | (C++11 前)
constexpr bitset( unsigned long long val ) noexcept; |  | (C++11 起)
| (3) |
template< class CharT, class Traits, class Alloc > explicit bitset( const std::basic_string<CharT,Traits,Alloc>& str, typename std::basic_string<CharT,Traits,Alloc>::size_type pos = 0, typename std::basic_string<CharT,Traits,Alloc>::size_type n = std::basic_string<CharT,Traits,Alloc>::npos); |  | (C++11 前)
template< class CharT, class Traits, class Alloc > explicit bitset( const std::basic_string<CharT,Traits,Alloc>& str, typename std::basic_string<CharT,Traits,Alloc>::size_type pos = 0, typename std::basic_string<CharT,Traits,Alloc>::size_type n = std::basic_string<CharT,Traits,Alloc>::npos, CharT zero = CharT('0'), CharT one = CharT('1')); |  | (C++11 起)
template< class CharT > explicit bitset( const CharT* str, typename std::basic_string<CharT>::size_type n = std::basic_string<CharT>::npos, CharT zero = CharT('0'), CharT one = CharT('1')); | (4) | (C++11 起)

从数个数据源之一构造新的 bitset ：

1) 默认构造函数。构造所有位设为零的 bitset 。
2) 构造 bitset ，初始化其首（最右、最低） `M` 位位置为对应 `val` 的位值，其中 `M` 是 `unsigned long long` 的位数和正在构造的 bitset 中的位数 `N` 的较小者。若 M 小于 N （ bitset 长于 32 (C++11 前)64 (C++11 起) 位，对于典型的 unsigned long (C++11 起)long 实现），则剩余位位置被初始化为零。
3) 用 std::basic_string `str` 中的字符构造 bitset 。能提供可选的起始位置 `pos` 和长度 `n` ，以及指代设置（ `one` ）和不设置（ `zero` ）位的替代值的字符。用 `Traits::eq()` 比较字符值。
初始化字符串的有效长度是 min(`n`, `str.size() - pos`) 。
若 `pos > str.size()` ，则构造函数抛出 std::out_of_range 。若 `str` 中检验到的任何字符非 `zero` 或 `one` ，则抛出 std::invalid_argument 。
4) 同 (3) ，但用 `CharT*` 代替 std::basic_string 。等价于 bitset(n == basic_string<CharT>::npos ? basic_string<CharT>(str) : basic_string<CharT>(str, n), 0, n, zero, one) 。

### 参数

val | - | 用于初始化 bitset 的数字
str | - | 用于初始化 bitset 的字符串
pos | - | `str` 中的起始偏移
n | - | 使用来自 `str` 的字符数
one | - | 设置位于 `str` 中的替用字符
zero | - | 不设置位于 `str` 中的替用字符

### 异常

3) 若 pos > str.size() 则为 std::out_of_range ，若任何字符非一或零则为 std::invalid_argument
4) std::invalid_argument ，若任何字符非一或零

### 示例

    #include <bitset>
    #include <string>
    #include <iostream>
    #include <climits>

    int main()
    {
        // 空构造函数
        std::bitset<8> b1; // [0,0,0,0,0,0,0,0]

        // unsigned long long 构造函数
        std::bitset<8> b2(42);          // [0,0,1,0,1,0,1,0]
        std::bitset<70> bl(ULLONG_MAX); // [0,0,0,0,0,0,1,1,1,...,1,1,1] in C++11
        std::bitset<8> bs(0xfff0);      // [1,1,1,1,0,0,0,0]

        // string 构造函数
        std::string bit_string = "110010";
        std::bitset<8> b3(bit_string);       // [0,0,1,1,0,0,1,0]
        std::bitset<8> b4(bit_string, 2);    // [0,0,0,0,0,0,1,0]
        std::bitset<8> b5(bit_string, 2, 3); // [0,0,0,0,0,0,0,1]

        // 使用自定义零/一数字的 string 构造函数
        std::string alpha_bit_string = "aBaaBBaB";
        std::bitset<8> b6(alpha_bit_string, 0, alpha_bit_string.size(),
                          'a', 'B');         // [0,1,0,0,1,1,0,1]

        // 使用自定义数字的 char* 构造函数
        std::bitset<8> b7("XXXXYYYY", 8, 'X', 'Y'); // [0,0,0,0,1,1,1,1]

        std::cout << b1 << '\n' << b2 << '\n' << bl << '\n' << bs << '\n'
                  << b3 << '\n' << b4 << '\n' << b5 << '\n' << b6 << '\n'
                  << b7 << '\n';
    }

可能的输出：

    00000000
    00101010
    0000001111111111111111111111111111111111111111111111111111111111111111
    11110000
    00110010
    00000010
    00000001
    01001101
    00001111

### 参阅

set | 将位置为 true 或者提供的值 (公开成员函数)
reset | 将位置为 false (公开成员函数)