bitset 是 C++ 标准库中的一个模板类,用于表示和操作一组位(bit)。它提供了一种高效的方式来管理和操作固定大小的位序列。

基本用法

bitset 是一个模板类,它需要一个整数参数来指定位的数量。例如:

1
2
3
4
5
6
7
8
#include <bitset>
#include <iostream>

int main() {
std::bitset<8> bs; // 定义一个包含8个位的bitset,初始化为00000000
std::cout << bs << std::endl;
return 0;
}

在这个例子中,std::bitset<8> 定义了一个包含8个位的位集,默认情况下所有位都初始化为0。

特点和注意事项

  1. 固定大小bitset 的大小在编译时确定,不能动态改变。这意味着一旦创建,位的数量是固定的。
  2. 位操作bitset 提供了丰富的位操作函数,如按位与(&)、按位或(|)、按位异或(^)、取反(~)等。
  3. 高效:由于bitset是基于位操作的,因此它在内存和速度方面都非常高效,尤其适用于需要大量布尔操作的场景。
  4. 位访问:可以通过下标操作符[]来访问和修改特定位。
  5. 初始化:可以通过整数或字符串来初始化bitset,但要注意字符串的长度和格式。

示例代码

以下是一些关于bitset的示例代码,以展示其常见用法和操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <bitset>
#include <iostream>

int main() {
std::bitset<8> bs1; // 默认初始化为00000000
std::bitset<8> bs2(42); // 用整数初始化,42的二进制表示是00101010
std::bitset<8> bs3("1100"); // 用字符串初始化,前面四位会被补零,得到00001100

// 输出bitset
std::cout << "bs1: " << bs1 << std::endl;
std::cout << "bs2: " << bs2 << std::endl;
std::cout << "bs3: " << bs3 << std::endl;

// 位操作
bs1.set(1); // 将第1位置为1,结果是00000010
bs2.reset(1); // 将第1位清零,结果是00101000
bs3.flip(0); // 翻转第0位,结果是00001101

std::cout << "After operations:" << std::endl;
std::cout << "bs1: " << bs1 << std::endl;
std::cout << "bs2: " << bs2 << std::endl;
std::cout << "bs3: " << bs3 << std::endl;

// 访问位
std::cout << "bs2[3]: " << bs2[3] << std::endl; // 输出1
std::cout << "bs3.count() : " << bs3.count() << std::endl; // 计算1的数量,输出3

return 0;
}

额外资源


本站由 @anonymity 使用 Stellar 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。