STL - bitset

Posted ymzjj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL - bitset相关的知识,希望对你有一定的参考价值。

STL - bitset 小结

 

声明:

#include <bitset>
using std::bitset;

 

申请对象以及初始化:

bitset<n> b;

b有n位,每位都为0

bitset<n> b(u);

b是unsigned long型u的一个副本

bitset<n> b(s);

b是string对象s中含有的位串的副本

bitset<n> b(s, pos, n);

b是s中从位置pos开始的n个位的副本

 

 

 

 

 

 

 

 

 

对象的操作:

b.any()

b中是否存在置为1的二进制位? 返回 bool

b.none()

b中不存在置为1的二进制位吗? 返回 bool

b.count()

b中置为1的二进制位的个数   返回 size_t

b.size()

b中二进制位的个数

b[pos]

访问b中在pos处的二进制位

b.test(pos)

b中在pos处的二进制位是否为1?  返回bool

b.set()

把b中所有二进制位都置为1

b.set(pos)

把b中在pos处的二进制位置为1

b.reset()

把b中所有二进制位都置为0

b.reset(pos)

把b中在pos处的二进制位置为0

b.flip()

把b中所有二进制位逐位取反

b.flip(pos)

把b中在pos处的二进制位取反

b.to_ulong()

用b中同样的二进制位返回一个unsigned long值

os << b

把b中的位集输出到os流

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

每行的数字转换为二进制后代表一个汉字的16*16像素信息(1代表墨迹,0代表无墨迹)。

 1 #include <iostream>
 2 #include <bitset>
 3 using namespace std;
 4 int main()
 5 {
 6     int n,m;
 7     while(cin>>n>>m)
 8     {
 9         bitset<8> t(n);//创建对象的时候可以直接传进去一个数
10         for(int i = t.size()-1; i >= 0; i--)
11             if(t[i] == 1) printf("*");
12             else printf(" ");
13         //cout<<t;  //也可以直接输出二进制
14         t = m;//也可以直接赋值
15         for(int i = t.size()-1; i >= 0; i--)
16             if(t[i] == 1) printf("*");
17             else printf(" ");
18         puts("");
19 //        cout<<t<<endl;    //也可以直接输出二进制
20     }
21 }
22 
23 /*
24 4 0 4 0 4 0 4 32 -1 -16 4 32 4 32 4 32 4 32 4 32 8 32 8 32 16 34 16 34 32 30 -64 0
25 16 64 16 64 34 68 127 126 66 -124 67 4 66 4 66 -124 126 100 66 36 66 4 66 4 66 4 126 4 66 40 0 16
26 4 0 4 0 4 0 4 32 -1 -16 4 32 4 32 4 32 4 32 4 32 8 32 8 32 16 34 16 34 32 30 -64 0
27 0 -128 64 -128 48 -128 17 8 1 -4 2 8 8 80 16 64 32 64 -32 64 32 -96 32 -96 33 16 34 8 36 14 40 4
28 4 0 3 0 1 0 0 4 -1 -2 4 0 4 16 7 -8 4 16 4 16 4 16 8 16 8 16 16 16 32 -96 64 64
29 16 64 20 72 62 -4 73 32 5 16 1 0 63 -8 1 0 -1 -2 0 64 0 80 63 -8 8 64 4 64 1 64 0 -128
30 0 16 63 -8 1 0 1 0 1 0 1 4 -1 -2 1 0 1 0 1 0 1 0 1 0 1 0 1 0 5 0 2 0
31 2 0 2 0 7 -16 8 32 24 64 37 -128 2 -128 12 -128 113 -4 2 8 12 16 18 32 33 -64 1 0 14 0 112 0
32 1 0 1 0 1 0 9 32 9 16 17 12 17 4 33 16 65 16 1 32 1 64 0 -128 1 0 2 0 12 0 112 0
33 0 0 0 0 7 -16 24 24 48 12 56 12 0 56 0 -32 0 -64 0 -128 0 0 0 0 1 -128 3 -64 1 -128 0 0
34 */

 

 

b.to_string() 转换为 string

技术图片
 1 // bitset::to_string
 2 #include <iostream>       // std::cout
 3 #include <string>         // std::string
 4 #include <bitset>         // std::bitset
 5 
 6 int main ()
 7 {
 8   std::bitset<4> mybits;     // mybits: 0000
 9   mybits.set();              // mybits: 1111
10 
11   std::string mystring =
12     mybits.to_string<char,std::string::traits_type,std::string::allocator_type>();
13 
14   std::cout << "mystring: " << mystring << 
;
15 
16   return 0;
17 }
View Code

 

b.to_ulong()转换为 unsigned long

b.to_ullong() 转换为 unsigned longlong

技术图片
 1 // bitset::to_ulong
 2 #include <iostream>       // std::cout
 3 #include <bitset>         // std::bitset
 4 
 5 int main ()
 6 {
 7   std::bitset<4> foo;     // foo: 0000
 8   foo.set();              // foo: 1111
 9 
10   std::cout << foo << " as an integer is: " << foo.to_ulong() << 
;
11 
12   return 0;
13 }
View Code

 

以上是关于STL - bitset的主要内容,如果未能解决你的问题,请参考以下文章

STL容器 -- Bitset

STL详解(十五)—— bitset(位图)的模拟实现

STL详解(十四)—— bitset(位图)的介绍与使用

理论: STL: bitset

STL bitset::count() 方法的性能如何?

BZOJ3687:bitset STL