bitset类型
一、bitset简介
1、标准库定义了bitset类,使得位运算的使用更容易,并且能够处理超过最长整型类型大小的位集合。
2、定义在头文件bitset中。
二、定义和初始化bitset
1、当我们定义一个bitset时,需要声明它包含多少个二进制位。
2、bitset中的二进制位也是未命名的,我们通过位置访问他们。
编号从0开始的二进制位被称为低位,编号到末尾为高位。
3、
bitset< n > b; | b有n位,每位均为0 |
bitset< n> b(u) | b是u低n位的拷贝,若位数不够,先填低位,不足的高位补0 |
bitset< n> b(s,pos,m,zero,one) | b是s从位置pos开始m个字符的拷贝。s只包含zero或one,pos默认为0,zero默认为’0’,one默认为’1’ |
bitset< n> b(cp,pos,m,zero,one) | cp是指向字符数组中拷贝字符 |
bitset<13> bitve1(0xbeef); //二进制1111011101111
bitset<20> bitvel(0xbeef); //二进制序列00001011111011101111
bitset<128> bitvel(~oULL); //0~63位为1,63~127位为0
bitset<32> bitvel("1100"); //2,3位为1,其余位为0
字符串 1100 ,11是高位,00的低位。
三、bitset操作
b.any() | b中是否存在置位的二进制 |
b.all() | b中所有位都置位了 |
b.one() | b中不存在置位的二进制位吗 |
b.count() | b中置位的位数 |
b.size() | 返回b中二进制的位数 |
b.test(pos) | 若pos是置位,返回true,否则false |
b.set(pos,v) | 把pos位置的位设置为bool值的v,v默认为true |
b.set() | 把全部位置位 |
b.reset(pos) | 将pos位置的位复位 |
b.reset() | 把全部位置的位复位 |
b.flip(pos) | 改变pos位置的位状态 |
b.flip() | 改变全部位置的状态 |
b[pos] | 访问pos位置的位 |
b.to_ulong() | 返回一个unsigned long值 |
b.to_ullong() | 返回一个unsigned longlong值 |
b.to_string(zerp,one) | 返回一个string |
os<<b | 打印b |
is>>b | 读取字符 |
bitset<32> bitvec(1U); //32位,低位为1,剩余位为0
bool is_set=bitvec.any(); //true,因为有1位置位
bool is_not_set=bitvec.none();//false 有1位置位
bool all_set=bitvec.all();//false 只有一位置位
size_t onBites=bitvec.count();// 返回1
size_t st=bitvec.size();//返回32
bitvec.flip();//翻转所有位
bitvec.reset();//将所有位复位
bitvec.set();//将所有位置位
#include<iostream>
#include<bitset>
using namespace std;
int main() {
bitset<32> bitvec(1U);
cout <<"bitvec=" << bitvec << endl;
bitvec.flip();
cout << "翻转所有位=" << bitvec << endl;
bitvec.reset();
cout << "所有位复位=" << bitvec << endl;
bitvec.set();
cout << "所有位置位=" << bitvec << endl;
return 0;
}