bitset存储的是二进数位,就和一个bool性数组差不多。用法上和数组的操作方式也差不多。
每位只占一个字节,大大优化了空间,可以通过数组形式访问。
定义
bitset在定义的时候必须定义大小,这里8便是我们定义的长度,定义一个空bitset时所有值默认为0;
#include <bitset>
bitset<8> b;
bitset<8> bit(8);
bitset<8> tp1(string("01010101"));
bitset<8> tp2(bit);
cout << " b = " << b << endl;
cout << "bit = " << bit << endl;
cout << "tp1 = " << tp1 << endl;
cout << "tp2 = " << tp2 << endl;
输出:
1 b = 00000000
2 bit = 00001000
3 tp1 = 01010101
4 tp2 = 00001000
运算
bitset<4> tp1(string("0101"));
bitset<4> tp2(string("1110"));
cout << "(tp1 & tp2) = " << (tp1 & tp2) << endl;
cout << "(tp1 | tp2) = " << (tp1 | tp2) << endl;
cout << "(tp1 ^ tp2) = " << (tp1 ^ tp2) << endl;
cout << "(~tp1) = " << (~tp1) << endl;
cout << "(tp1 &= tp2) = " << (tp1 &= tp2) << endl;
cout << "(tp1 |= tp2) = " << (tp1 |= tp2) << endl;
cout << "(tp1 ^= tp2) = " << (tp1 ^= tp2) << endl;
cout << "(tp1 <<= 1) = " << (tp1 <<= 1) << endl;
cout << "(tp1 ^= tp) = " << (tp1 ^= 4) << endl;
cout << "(tp1 == tp2) = " << (tp1 == tp2) << endl;
cout << "(tp1 != tp2) = " << (tp1 != tp2) << endl;
输出:
(tp1 & tp2) = 0100
(tp1 | tp2) = 1111
(tp1 ^ tp2) = 1011
(~tp1) = 1010
(tp1 &= tp2) = 0100
(tp1 |= tp2) = 1110
(tp1 ^= tp2) = 0000
(tp1 <<= 1) = 0000
(tp1 ^= tp) = 0100
(tp1 == tp2) = 0
(tp1 != tp2) = 1
基本操作
bit.size(); //返回大小(长度)
bit.count(); //返回1的个数
bit.any(); //返回是否有1
bit.none(); //返回是否没有1
bit.set(); //全部置为1
bit.set(p); //将p+1(下标从0开始!!)位置为1
bit.set(p,n); //将p+1位置为n
bit.reset(); //全部置为0
bit.reset(p); //将p+1位置为0
bit.flip(); //全部取反 等同于 (~bit)
bit.flip(p); //将p+1位取反
bit.to_ulong(); //返回转换为 unsigned long 的结果,超范围会报错
bit.to_ullong();//返回转换为 unsigned long long 的结果,超范围报错
bit.to_string();//返回转换为 string 的结果