码迷,mamicode.com
首页 > 编程语言 > 详细

C++ Primer 学习笔记_9_标准库类型(续3) -- biteset

时间:2015-06-25 21:18:33      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:c++   c++ primer   bitset   二进制   标准库   



标准库类型(四)

--biteset



序言:

    位是用来保存一组项或条件的yes/no信息[标识]的简洁方法。

  1. #include <bitset>  
  2. using std::bitset;  

正文:

1bitset对象的定义和初始化

    和vector对象不同的是:bitset类型对象的区别在于其长度而不是类型。在定义bitest时,要在尖括号中说明给出他的长度。

  1. bitset<32> bitvec;  

  1. //四种初始化bitset的方法  
  2.     bitset<n> b;  
  3.     bitset<n> b(u);  
  4.     bitset<n> b(string);  
  5.     bitset<n> b(string,pos,m);  

2、位集合的位置编号从0开始,但是,他的顺序是从右往左排的!以0位开始的位串是低阶位,以n结尾的是高阶位!

技术分享

  1. //用unsigned值初始化bitset对象  
  2.     bitset<128> b(0Xffff);  
  3.     bitset<32> b(0Xffff);  
  4.     bitset<16> b(0Xffff);  
  5.     bitset<16> b(10);  

  1. /* 
  2. *用string对象初始化bitset对象 
  3. *仍然是从右往左:string对象的最右边字符,用来初始化bitset对象的低阶位! 
  4. */  
  5.     string str("1100");  
  6.     bitset<16> b(str);  
  7.     string str("1000110011101111");  
  8.     bitset<4> b(str); //从左边开始截取  

  1. /* 
  2. *截取的是1101 
  3. *但是保存的时候是从右往左填充bitset对象 
  4. */  
  5.     string str("1000110111101111");  
  6.     bitset<32> b(str,5,4);  

  1. /* 
  2. *截取01111 
  3. *然后从右往左填充 
  4. */  
  5.     string str("1000110011101111");  
  6.     bitset<32> b(str,str.size() - 5);  

3size_t类型

    size_t类型是一个与机器相关的unsigned类型,其大小足以保证存储内存中对象的大小!

  1. size_t sz = bitvec.size();  

4bitset对象上的操作

  1. bool is_set = bitvec.any();  
  2. bool is_not_set = bitvec.none();  
  3. size_t sz = bitvec.count();  

  1. for (size_t i = 0;i < bitvec.size(); ++i)  
  2.     bitvec[i] = 1;  
  3. for (size_t i = 0;i != bitvec.size(); ++i)  
  4. {  
  5.     bitvec.set(i);  
  6. }  
  7. bitvec.set();  
  8. bitvec.reset();  

  1. for (size_t i = 0;i != bitvec.size(); ++i)  
  2. {  
  3.     if (bitvec[i])  
  4.         cout << 1 ;  
  5.     else  
  6.         cout << 0 ;  
  7. }  
  8. for (size_t i = 0;i != bitvec.size(); ++i)  
  9. {  
  10.     if (bitvec.test(i))  
  11.         cout << 1 ;  
  12.     else  
  13.         cout << 0 ;  
  14. }  


5、获取bitset对象的值

  1. unsigned long value = bitvec.to_ulong();  

  1. //观察程序  
  2. int main()  
  3. {  
  4.     string str("00001000110011101111");  
  5.     bitset<20> bitvec(str);  
  6.   
  7.     for (size_t i = 0;i != bitvec.size(); ++i)  
  8.     {  
  9.         if (bitvec.test(i))  
  10.             cout << 1 ;  
  11.         else  
  12.             cout << 0 ;  
  13.     }  
  14.     cout << endl;  
  15.     cout << bitvec << endl;  
  16. }  
  1. <pre snippet_file_name="blog_20140405_12_2743648" code_snippet_id="276569"></pre><pre class="cpp" name="code" snippet_file_name="blog_20140405_13_1191269" code_snippet_id="276569"><pre snippet_file_name="blog_20140405_13_1191269" code_snippet_id="276569"></pre>  
  2. <pre></pre>  
  3. <pre></pre>  
  4. <pre></pre>  
  5. <pre></pre>  
  6. <pre></pre>  
  7. <pre></pre>  
  8. </pre>  

C++ Primer 学习笔记_9_标准库类型(续3) -- biteset

标签:c++   c++ primer   bitset   二进制   标准库   

原文地址:http://blog.csdn.net/selfi_xiaowen/article/details/46640321

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!