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
![](https://i-blog.csdnimg.cn/blog_migrate/a2b7024cb6a8cccd23244148c90016f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/aa7790439652fcf252898472b6dc57b7.gif)
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 << '\n'; 15 16 return 0; 17 }
b.to_ulong()转换为 unsigned long
b.to_ullong() 转换为 unsigned longlong
![](https://i-blog.csdnimg.cn/blog_migrate/a2b7024cb6a8cccd23244148c90016f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/aa7790439652fcf252898472b6dc57b7.gif)
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() << '\n'; 11 12 return 0; 13 }