C++

C++ 知识量:19 - 82 - 316

17.2 bitset类型><

bitset类型介绍- 17.2.1 -

bitset是C++标准库中的一个类,用于处理固定大小的位序列。它允许以一种高效且方便的方式操作位的值。bitset的大小在编译时确定,不能在运行时改变。

以下是bitset的基本定义和初始化方式:

#include <bitset>  
  
int main() {  
    // 定义一个8位的bitset,所有位初始化为0  
    std::bitset<8> b;   
  
    // 定义一个16位的bitset,所有位初始化为1  
    std::bitset<16> b1(1);   
  
    // 使用位操作设定某些位的值  
    b.set(0, true); // 设置第0位为true  
    b.set(2, true); // 设置第2位为true  
    b.clear(1); // 清除第1位  
    b.flip(); // 反转所有位  
  
    // 打印bitset的值  
    std::cout << b << std::endl;   
    std::cout << b1 << std::endl;   
  
    return 0;  
}

以上代码定义了两个bitset对象:b和b1。其中,b是一个8位的bitset,所有位初始化为0;b1是一个16位的bitset,所有位初始化为1。然后,对b进行了位操作,设置了某些位的值,并清除了其他位。最后,打印了这两个bitset的值。

bitset操作- 17.2.2 -

以下是C++ bitset的一些基本操作:

1. 创建和初始化

创建和初始化bitset的最简单方式如下:

std::bitset<N> bs; // 创建一个N位的bitset,所有位初始化为0      
std::bitset<N> bs(M); // 创建一个N位的bitset,所有位初始化为M(一个整数)

2. 访问

可以使用下标操作符([])访问bitset中的特定位。下标从右到左编号:

bs[index]; // 读取或写入第index位

3. 设置和清除

可以使用set和clear函数来设置或清除bitset中的特定位:

bs.set(); // 将所有位设为true      
bs.set(index); // 将第index位设为true      
bs.set(index, value); // 将第index位设为value(true或false)      
bs.clear(); // 将所有位设为false      
bs.clear(index); // 将第index位设为false

4. 反转

使用flip函数可以反转bitset中特定位的值:

bs.flip(); // 反转所有位      
bs.flip(index); // 反转第index位

5. 打印

可以使用to_string函数将bitset转换为字符串,方便打印:

std::cout << bs.to_string() << std::endl; // 打印bitset的值

6. 位操作

bitset支持常见的位操作,如左移(<<)、右移(>>)、按位与(&)、按位或(|)、按位异或(^)等:

std::bitset<8> a(0b10101010); // 创建8位的bitset,初始值为10101010      
std::bitset<8> b(0b01010101); // 创建8位的bitset,初始值为01010101      
std::cout << (a << 2) << std::endl; // 左移2位,打印结果为1010101000      
std::cout << (a | b) << std::endl; // 按位或,打印结果为11111111(即int类型的255)