bitset

一:bitset头文件

C++的 bitset 在 bitset 头文件中,它是一种类似数组的结构,它的每一个元素只能是 0 或 1,每个元素仅用 1bit 空间

注:在用字符串构造时,字符串中只能包含‘0’和‘1’;bitset下标从0开始,可以通过【】访问元素,类似数组

二:常用构造函数

 

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int maxn = 1e5+10;
 5 const int inf = 0x3f3f3f3f;
 6 #define rep(i,first,second) for(ll i=first;i<=second;i++)
 7 #define dep(i,first,second) for(ll i=first;i>=second;i--)
 8 
 9 int main()
10 {
11     //1.bitset<len>b;
12     //无参构造,长度为len,默认每一位为0
13     bitset<4> bitset1;
14 
15     //2.bitset<len>b(unsigned long n)
16     //长度为len,二进制保存n,若十进制化为二进制后位数不足len,前面用0补充
17     //若十进制化为二进制后位数超过len,则前面被截除
18     bitset<8> bitset2(12);
19 
20     //3.bitset<len>(string s)
21     //长度为len,前面用0补充
22     string s="100101";
23     bitset<10> bitset3(s);
24 
25     //4.长度为9,前面用0补充
26     char ss[]="10101";
27     bitset<9> bitset4(ss);
28 
29     //5.bitset<len>b(string s,int pos)
30     //长度为len,从s的pos为开始往后截取s,前面的补0
31     string st="01011011";
32     bitset<10>bitset5(st,1);
33 
34     //6.bitset<len>b(string s,int pos,int num)
35     //从s的pos位开始取后面的num个,前面补0
36     string stt="01011011";
37     bitset<10>bitset6(stt,2,4);
38 
39 
40     cout<<bitset1<<endl;
41     cout<<bitset2<<endl;
42     cout<<bitset3<<endl;
43     cout<<bitset4<<endl;
44     cout<<bitset5<<endl;
45     cout<<bitset6<<endl;
46 
47     return 0;
48 }

 

 三:可用操作符

 

 1 #include <iostream>
 2 #include <bitset>
 3 #include <algorithm>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     string s1="1001";
 9     string s2="0011";
10     bitset<4>foo (s1);
11     bitset<4>bar (s2);
12 
13     cout<<(foo^=bar)<<'\n'; //按位异或,赋值给foo
14     cout<<(foo&=bar)<<'\n'; //按位与,赋值给foo
15     cout<<(foo|=bar)<<'\n'; //按位或,赋值给foo
16 
17     cout<<(foo<<=1)<<'\n';  //左移1位,低位补0,自身赋值
18     cout<<(foo>>=1)<<'\n';  //右移1位,高位补0,自身赋值
19 
20     cout<<(~bar)<<'\n';     //按位取反
21     cout<<(bar<<1)<<'\n';   //左移一位,不赋值
22     cout<<(bar>>1)<<'\n';   //右移一位,不赋值
23 
24     cout<<(foo==bar)<<'\n'; //false,判foo与bar是否相等
25     cout<<(foo!=bar)<<'\n'; //true,判foo与bar是否不相等
26 
27 
28     return 0;
29 }

 

 

 

四.通过【】访问元素,类似数组,注意:最低位(右边是最低位)下标为 0 

 1 #include <iostream>
 2 #include <bitset>
 3 #include <algorithm>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     bitset<4> foo(8);
 9     for(int i=3;i>=0;i--){
10         cout<<foo[i];
11     }
12     cout<<'\n';
13     return 0;
14 }

 

 五:其他函数

 

 1 #include <iostream>
 2 #include <bitset>
 3 #include <algorithm>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     bitset<8> a("10011010");
 9 
10     cout<<a.count()<<'\n';  //(count函数用来求bitset中1的位数)
11     cout<<a.size()<<'\n';   //(size函数用来求bitset的大小
12 
13     cout<<a.test(0)<<'\n';  //(test函数用来查找下标处的元素是0还是1,若为0返回0,若为1返回1
14     cout<<a.test(7)<<'\n';  
15 
16     cout<<a.any()<<'\n';    //(any函数检查bitset中是否有1)
17     cout<<a.none()<<'\n';   //(none函数检查bitset中是否没有1)
18     cout<<a.all()<<'\n';    //(all函数检查bitset中是否全部为1)
19     return 0;
20 }

 

 

 六:类型转化函数:

 1 #include <iostream>
 2 #include <bitset>
 3 #include <algorithm>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     bitset<8> a("10011100");
 9     string s=a.to_string();
10     unsigned long x=a.to_ulong();
11     unsigned long long y=a.to_ullong();
12 
13     cout<<s<<'\n';
14     cout<<x<<'\n';
15     cout<<y<<'\n';
16     return 0;
17 }

 

posted @ 2020-04-11 01:10  swsyya  阅读(293)  评论(0编辑  收藏  举报

回到顶部