1,介绍
bitset是一个可以位数开很大的二进制类似数组一样的工具,可以进行一系列位运算等二进制运算,且操作性更强,可以用于标记数组,状态压缩等等
2.定义方法
//无初始值,全部为0
bitset<N>a1;//常数定义,注意,N必须是常数,不可以是变量,这里N已经用const修饰了,这个开了N位的二进制a,最低位0,最高位N-1,可以通过下标直接访问,如a1[0]
//有初始值
bitset<N>a2(666);//初始值为666的二进制,高位不够补零
bitset<N>a3(string("1010010"));//初始值为字符串,高位不够补零
//字符串另一种写法 字符串是越右边的给二进制越低位,跟字符串自己的下标相反
string x = "1001010011101";
bitset<N>a4(x);
bitset<N>a5(x, 2, 3);//从x的下标2开始,copy3位
cout << a1 << '\n' << a2 << '\n' << a3 << '\n' << a4 << '\n' << a5;
//位运算操作
a3 ^= a2;
cout << endl << endl << a3;
3,常用函数
bitset<N>a;
int k=6;
//统计操作
a.count();//统计多少位是1
a.any();//有1位是1返回1
a.none();//全0返回1
a.size();//a的位数,即N
//赋值操作
a.set();//全部置为1
a.set(k);//第k位置为1,即a[k]=1
a.reset();//全部置为0
a.reset(k);//k位置为0,a[k]=0
a.flip();//全部按位取反
a.flip(k);//k位取反,即a[k]^=1
//转换函数
string b=a.to_string();//转为字符串
ull a1=a.to_ullong();//转为ull
unsigned ll a2=a.to_ulong();//转为ul