命名空间
变体
操作

std::bitset

来自 cppreference.com
< cpp‎ | utility
 
 
实用程序库
语言支持
类型支持 (基本类型,RTTI)
库功能测试宏 (C++20)
动态内存管理
程序实用程序
协程支持 (C++20)
可变参数函数
调试支持
(C++26)
三方比较
(C++20)
(C++20)(C++20)(C++20)
(C++20)(C++20)(C++20)
通用实用程序
日期和时间
函数对象
格式化库 (C++20)
bitset
(C++11)
关系运算符 (C++20 中已弃用)
整数比较函数
(C++20)(C++20)(C++20)   
(C++20)
交换类型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
通用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
基本字符串转换
(C++17)
(C++17)

 
 
定义在头文件 <bitset>
template< std::size_t N >
class bitset;

类模板 bitset 表示一个固定大小的 N 位序列。位集可以使用标准逻辑运算符进行操作,并且可以与字符串和整数之间相互转换。为了字符串表示的目的以及命名移位操作的方向,该序列被认为其索引最低的元素在右侧,就像整数的二进制表示一样。

bitset 满足 CopyConstructibleCopyAssignable 的要求。

std::bitset 的所有成员函数都是 constexpr:可以在常量表达式的求值过程中创建和使用 std::bitset 对象。

(自 C++23 起)

内容

[编辑] 模板参数

N - 分配存储空间的位数

[编辑] 成员类型

代理类,表示对一个位的引用
(类)

[编辑] 成员函数

构造位集
(公有成员函数) [编辑]
(C++20 中已删除)
比较内容
(公有成员函数) [编辑]
元素访问
访问特定位
(公有成员函数) [编辑]
访问特定位
(公有成员函数) [编辑]
检查所有位、任何位或所有位是否都设置为 true
(公有成员函数) [编辑]
返回设置为 true 的位数
(公有成员函数) [编辑]
容量
返回位集保存的位数
(公有成员函数) [编辑]
修饰符
执行二进制 AND、OR、XOR 和 NOT
(公有成员函数) [编辑]
执行二进制左移和右移
(公有成员函数) [编辑]
将位设置为 true 或给定值
(公有成员函数) [编辑]
将位设置为 false
(公有成员函数) [编辑]
切换位的的值
(公有成员函数) [编辑]
转换
返回数据的字符串表示形式
(公共成员函数) [编辑]
返回数据的unsigned long 整数表示
(公共成员函数) [编辑]
(C++11)
返回数据的unsigned long long 整数表示
(公共成员函数) [编辑]

[编辑] 非成员函数

对位集执行二进制逻辑运算
(函数模板) [编辑]
执行位集的流输入和输出
(函数模板) [编辑]

[编辑] 辅助类

std::bitset 的哈希支持
(类模板特化) [编辑]

[编辑] 备注

如果位集的大小在编译时未知,或者需要在运行时更改其大小,则可以使用动态类型,例如 std::vector<bool>boost::dynamic_bitset<>

功能测试 Std 功能
__cpp_lib_constexpr_bitset 202207L (C++23) 更具 constexpr 特性的 std::bitset
__cpp_lib_bitset 202306L (C++26) std::bitsetstd::string_view 结合使用

[编辑] 示例

#include <bitset>
#include <cassert>
#include <cstddef>
#include <iostream>
 
int main()
{
    typedef std::size_t length_t, position_t; // the hints
 
    // constructors:
    constexpr std::bitset<4> b1;
    constexpr std::bitset<4> b2{0xA}; // == 0B1010
    std::bitset<4> b3{"0011"}; // can also be constexpr since C++23
    std::bitset<8> b4{"ABBA", length_t(4), /*0:*/'A', /*1:*/'B'}; // == 0B0000'0110
 
    // bitsets can be printed out to a stream:
    std::cout << "b1:" << b1 << "; b2:" << b2 << "; b3:" << b3 << "; b4:" << b4 << '\n';
 
    // bitset supports bitwise operations:
    b3 |= 0b0100; assert(b3 == 0b0111);
    b3 &= 0b0011; assert(b3 == 0b0011);
    b3 ^= std::bitset<4>{0b1100}; assert(b3 == 0b1111);
 
    // operations on the whole set:
    b3.reset(); assert(b3 == 0);
    b3.set(); assert(b3 == 0b1111);
    assert(b3.all() && b3.any() && !b3.none());
    b3.flip(); assert(b3 == 0);
 
    // operations on individual bits:
    b3.set(position_t(1), true); assert(b3 == 0b0010);
    b3.set(position_t(1), false); assert(b3 == 0);
    b3.flip(position_t(2)); assert(b3 == 0b0100);
    b3.reset(position_t(2)); assert(b3 == 0);
 
    // subscript operator[] is supported:
    b3[2] = true; assert(true == b3[2]);
 
    // other operations:
    assert(b3.count() == 1);
    assert(b3.size() == 4);
    assert(b3.to_ullong() == 0b0100ULL);
    assert(b3.to_string() == "0100");
}

输出

b1:0000; b2:1010; b3:0011; b4:00000110

[编辑] 另请参见

节省空间的动态位集
(类模板特化) [编辑]
位操作 (C++20) 用于访问、操作和处理单个位和位序列的实用程序