bitset

概念

bitset存储二进制数位。

bitset就像一个bool类型的数组一样,但是有空间优化——bitset中的一个元素一般只占1 bit,相当于一个char元素所占空间的八分之一。

主要特点

  1. 固定大小bitset 是一个固定大小的位集合,大小在编译时确定,无法在运行时改变。
  2. 位操作bitset 提供了一组操作符和成员函数,用于高效地进行位操作。
  3. 内存紧凑bitset 使用一个或多个整数来存储位,因此在内存中非常紧凑。
  4. 位设置bitset 允许设置、重置和测试单个位的状态。

基本用法

1. 创建和初始化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <bitset>
#include <iostream>

using namespace std;

int main() {
bitset<8> b1; // 创建一个大小为 8 的 bitset,所有位初始为 0
bitset<8> b2(0b10101010); // 使用二进制字面值初始化

cout << b1 << endl; // 输出: 00000000
cout << b2 << endl; // 输出: 10101010

return 0;
}


2.位操作

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
#include <bitset>
#include <iostream>

using namespace std;

int main() {
bitset<8> b(0b10101010);

// 设置位
b.set(1); // 设置第 1 位为 1
b.set(4, 0); // 设置第 4 位为 0

// 重置位
b.reset(1); // 将第 1 位重置为 0

// 切换位
b.flip(2); // 切换第 2 位

// 访问位
cout << "Bit 2: " << b[2] << endl; // 输出: 1
cout << "Bit 4: " << b.test(4) << endl; // 输出: 0

// 输出 bitset
cout << b << endl; // 输出: 10100000

return 0;
}

3. 其他操作

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
30
31
32
33
34
35
#include <bitset>
#include <iostream>

using namespace std;

int main() {
bitset<8> b1(0b10101010);
bitset<8> b2(0b11001100);

// 位与运算
bitset<8> b3 = b1 & b2; // 位与
cout << "b1 & b2: " << b3 << endl; // 输出: 10001000

// 位或运算
bitset<8> b4 = b1 | b2; // 位或
cout << "b1 | b2: " << b4 << endl; // 输出: 11101110

// 位异或运算
bitset<8> b5 = b1 ^ b2; // 位异或
cout << "b1 ^ b2: " << b5 << endl; // 输出: 01100110

// 位非运算
bitset<8> b6 = ~b1; // 位非
cout << "~b1: " << b6 << endl; // 输出: 01010101

// 计数位
cout << "Number of 1s in b1: " << b1.count() << endl; // 输出: 4

// 转换为字符串
string str = b1.to_string();
cout << "b1 as string: " << str << endl; // 输出: 10101010

return 0;
}

常用成员函数

  • 位操作

    • set(size_t pos, bool value = true):设置指定位置的位为 value(默认 true)。
    • reset(size_t pos):将指定位置的位重置为 0
    • flip(size_t pos):切换指定位置的位(0 变为 11 变为 0)。
    • test(size_t pos):测试指定位置的位,返回 true 如果该位为 1,否则返回 false
  • 访问和查询

    • operator[]:访问指定位置的位(返回 bool)。
    • count():返回 1 的数量,即设置为 1 的位的数量。
    • size():返回 bitset 的大小(位的总数)。
    • to_string():返回 bitset 的字符串表示形式。
  • 位运算

    • operator&:位与运算。
    • operator|:位或运算。
    • operator^:位异或运算。
    • operator~:位非运算。

bitset
http://pikachuxpf.github.io/posts/9dd4d1cb/
作者
Pikachu_fpx
发布于
2024年7月23日
许可协议