C++

刷题笔记——Bitset详解

C++学习笔记

Posted by Felix Zhang on February 14, 2020

bitset 详解

一些简单的原子操作,往往能组合出复杂而强大的功能,位操作的深远意义不在于表示一种数值,而是可能的情况数

基本结构

  • bitset所在的头文件,其命名空间为std,需要注意的是,bitset在使用时bitset属于非类型模板参数。

    #include <bitset>
    using namespace std;
      
    bitset<8> bs;
      
    //模板参数是一个size_t类型的数值(value),而非一个类型。
    //numeric_limits<size_t>::min() == 0;
    //std::bitset<N> 表示一个N位的二进制数对象。
    //默认构造函数将其全部初始为0。
      
    //将bitset转换为十进制数
    cout << bs.to_ulong() << endl;
    //将bitset转换为string类型
    cout << bs.to_string() << endl;
    
    • 需要注意的是,bitset模板类虽然重载了中括号运算符,bs[0]表示的是将该数值的最低一位(二进制的末尾元素)设为0,并非第一位。

      std::bitset<8> bs;		//0000 0000
      bs[0] = 1;							//0000 0001
      bs[7] = 1;							//1000 0001
      
    • 默认的无参构造所有位为0。其他的初始化方式如下:

      bitset<8> bs(7);
      bs.to_string();			//0000 0111
      bitset<8> bbs(0x07);
      bbs.to_string();		//0000 0111
      bitset<8> bbbs("00000111");
      bbbs.to_ulong();		//7
      

    Bitset的操作

    成员函数 函数功能
    bs.any() 检查是否有位数是1
    bs.none() 检查是否所有的位都是0
    bs.size() 返回该对象的位数
    bs.count() 检查值为1的个数
    bs.test(pos) 检测pos位是否为1
    bs.set() 所有位置为1
    bs.set(pos) pos位置为1
    bs.reset() 所有位置为0
    bs.reset(pos) pos位置为0
    bs.flip() 所有位取反
    bs.flip(pos) pos位取反
    os « b 逐位输出

    一些用法实例

最后更新日期:2020-02-15