std::bitset<N>::bitset

来自cppreference.com
< cpp‎ | utility‎ | bitset
 
 
工具库
通用工具
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中弃用)
整数比较函数
(C++20)(C++20)(C++20)
(C++20)
swap 与类型运算
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
常用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)

初等字符串转换
(C++17)
(C++17)
栈踪
 
 
(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 的位值,其中 Munsigned 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 中检验到的任何字符非 zeroone ,则抛出 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

参阅

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