bitset 相当于一维bool数组,对于二进制操作十分方便。
除了可以访问指定下标的bit位以外,还可以把它们作为一个整数进行统计。
基本操作:
#include<iostream> #include<cstdio> #include<bitset> using namespace std; const int N=1000; int main() { bitset<N> a; //赋值为真 a[100]=1; a.set(1); //访问该位是否为真 cout<<a.test(99)<<endl; cout<<a.test(100)<<endl; cout<<a[1]<<endl; cout<<a[2]<<endl; puts("—————"); //是否非空\全空\全满 cout<<a.any()<<endl; cout<<a.none()<<endl; cout<<a.all()<<endl; puts("—————"); //计数值为真的个数 cout<<a.count()<<endl; //返回位元素个数 cout<<a.size()<<endl; puts("—————"); //清空 a.reset(); cout<<a.count()<<endl; cout<<a.none()<<endl; puts("—————"); //反置---将0/1互换 a.flip(); cout<<a.count()<<endl; cout<<a.all()<<endl; return 0; }
上述代码输出结果:
6/8 UPD:
复习了一下,重新写了一个程序。嗯..表示上面的代码可以不用看了。
#include<iostream> #include<bitset> using namespace std; const int N=100; int main() { //声明(下标为0~99) bitset<N> a; int val=22; bitset<4> b(val);//★val超过4位,顶端被截除 string s("100011"); bitset<5> c(s);//★s超过5位,末尾被截除 //赋值 a[98]=1;//访问特定位 b.set(2);//将特定位置1 c.reset(3);//将特定位置0 //查询1 cout<<a.test(2)<<endl;//某位是否为真 cout<<a.test(98)<<endl; val=b.to_ulong();//重新得到val的值 cout<<"val="<<val<<endl; for(int i=0;i<5;i++) cout<<c[i];cout<<endl;//整体输出 //清空与反置 a.flip(98);//特定位反置(0/1互换) puts(a.none()?"没有位为1":"存在位为1"); b.reset();//所有位置0 puts(b.any()?"有任意位为1":"没有任何位为1"); c.set();//所有位置1 puts(c.all()?"所有位均为1":"不是所有位均为1"); //查询2 cout<<b.size()<<endl;//位元素的个数 cout<<c.count()<<endl;//值为1的位的个数 return 0; }
输出结果:
两个bitset的合并:
#include<iostream> #include<cstdio> #include<bitset> using namespace std; int main() { string s1("1111"),s2("0000"); bitset<4> bits1(s1); bitset<4> bits2(s2); int s=bits1.size()+bits2.size(); bitset<10> bits3;//注意:不可以实用动态参数作为模板参数,如bitset<s> bits3 for(int i=0;i<bits1.size();i++) if(bits1[i]==1) bits3.set(i); for(int i=bits1.size();i<s;i++) if(bits2[i-bits1.size()]==1) bits3.set(i); cout<<bits3<<endl<<bits3.to_ulong()<<endl; printf("%d",bits3.to_ulong());//相当于cout<<bits.to_ulong(); return 0; }
注意:
1、bits.to_ulong(),是.to_ulong,.to_ulong()!!!
(unsigned long)
2、string s("1111");bitset<4> bits(s);
与 bitset<4> bits(1111);是不同的!
而bitset<4> bits("1111");的写法是错误的!