简介
bitset用来管理的是一系列bit位,用法类似于string,只不过里面的每一个是bit。
头文件是 #include
bitset的定义方式
如下代码中的注释所示,bitset可以用string和整形进行初始化,但是当有溢出的时候保留的情况是不一样的。
void definition(){
//申请一个长度为4的bitset,默认每一位的值为0.
bitset<4> a;
cout<< "a: " << a <<endl;
//将20保存在一个长度为10的bitset中
bitset<10> b(20);
cout<< "b: " << b <<endl;
//bitset可以直接用string进行初始化
string s("10101010");
bitset<10> c(s);
cout<< "c: " << c <<endl;
/**
* @brief 注意事项
* 当设置的长度大于传入的参数的长度的时候:
* 可以注意到的是(d1和d2),字符串超出的时候,保留的是前面的部分。当为整数的时候,类似于真实的数据在内存中的保存,保存的是后面的部分。
* 传入的参数的长度大于设置的长度的时候:
* 前面的是以0进行补充
*/
bitset<4> d1("101011");
cout << "d1: " << d1 <<endl;
bitset<4> d2(43);
cout << "d2: " << d2 <<endl;
bitset<4> e("11");
cout << "e: " << e <<endl;
}
以上代码的运行结果如下:
bitset的函数
这里面要注意的是,bitset的索引是从右向左的。
void functionAboutBitset(){
bitset<8> mybitset("10101010");
cout << "mybitset:" << mybitset <<endl;
//返回1的个数
cout << "count() : " << mybitset.count() <<endl;
//返回位数
cout << "size() : " << mybitset.size() <<endl;
//检查这个位置的值是0->false, 1->true 需要注意的是,bitset的序号是从右往左的
cout << "test() : " << mybitset.test(0) <<endl;
//查看是否有1
cout << "any() : " << mybitset.any() <<endl;
//查看是否没有1
cout << "none() : " << mybitset.none() <<endl;
//查看是否全为1
cout << "all() : " << mybitset.all() << endl;
}
void functionAboutBitset2(){
bitset<4> s(15);
cout << "s : " << s <<endl;
//取反
s.flip();
cout << "filp() : " << s << endl;
//某一位取反
s.flip(3);
cout << "filp(3) : " << s << endl;
//全部置为1
s.set();
cout << "set() : " << s << endl;
//将某一位置为1
s.set(0);
cout << "set(0) : " << s << endl;
//reset
s.reset();
cout << "reset() : " << s << endl;
s.reset(0);
cout << "reset(0) : " << s << endl;
}
以上代码的运行结果是:
具体看bitset是如何实现的可以去看看源码