版权声明:转载请注明出处。 https://blog.csdn.net/u014427196/article/details/49561949

bitset类型使得位运算更为容易,定义在头文件bitset中

定义和初始化bitset

定义bitset时需声明包含多少位:

    bitset<32> bits(1u);//定义一个32位第一位为1 其他位为0 的bitset

bitset初始化的方法:

    bitset<n> b;  n位均为0
    bitset<n> b(u);  对u的低n位拷贝
    bitset<n> b(s, pos, m, zero, one);  拷贝字符串s的pos位置开始的m个字符,字符串包含zero和one字符
    bitset<n> b(cp, pos, m, zero, one);  拷贝数组cp的pos位置开始的m个字符,字符串包含zero和one字符

用unsigned初始化:

    bitset<13> b1(0xbeef);
    bitset<20> b2(0xbeef);
    bitset<128> b3(~0ull);
    cout << b1 << endl;
    cout << b2 << endl;
    cout << b3 << endl;

从一个string初始化bitset:
注意string的下标习惯与bitset恰好相反。

     string s = "1111111000001010101110";
    bitset<20> b1("1100");
    bitset<20> b2(s,5,4);
    bitset<20> b3(s,s.size()-4);
    cout << b1 << endl;
    cout << b2 << endl;
    cout << b3 << endl;

这里写图片描述

bitset操作

置位操作即为 1,复位操作为 0

    bitset<32> b; 
    b.any();  是否存在置位的二进制位
    b.all();  是否所有置位的二进制位
    b.none();   是否不存在置位的二进制位
    b.count();  置位的二进制位个数
    b.size();  二进制位数
    b.test(pos);  是否pos置位的二进制置位
    b.set(pos,v);  pos位置置位v
    b.set();  默认set为true
    b.reset(pos);  pos位置复位
    b.reset();  
    b.flip(pos);  改变pos位置的状态
    b.flip();
    b[pos];  
    b.to_string();
    b.to_ullong();
    b.to_ulong();
    os << b;
    is >> b;

提取bitset的值:

    bitset<32> b ("1100");
    unsigned long long uu = b.to_ullong();
    cout << uu << endl;

这里写图片描述

bitset 的 IO 运算:
输入直至读取的位数达到对应大小,或遇到非法字符,或文件结束。

    bitset<12> b;
    cin >> b;
    cout << b << endl;

这里写图片描述

bitset的使用:
和普通位运算基本一致,不过多了一些操作的方法,就不赘述了。