标签:c++ c++ primer bitset 二进制 标准库
标准库类型(四)
--biteset
序言:
位是用来保存一组项或条件的yes/no信息[标识]的简洁方法。
- #include <bitset>
- using std::bitset;
#include <bitset>
using std::bitset;
正文:
1、bitset对象的定义和初始化
和vector对象不同的是:bitset类型对象的区别在于其长度而不是类型。在定义bitest时,要在尖括号中说明给出他的长度。
bitset<32> bitvec;
-
- bitset<n> b;
- bitset<n> b(u);
- bitset<n> b(string);
- bitset<n> b(string,pos,m);
//四种初始化bitset的方法
bitset<n> b;
bitset<n> b(u);
bitset<n> b(string);
bitset<n> b(string,pos,m);
2、位集合的位置编号从0开始,但是,他的顺序是从右往左排的!以0位开始的位串是低阶位,以n结尾的是高阶位!
-
- bitset<128> b(0Xffff);
- bitset<32> b(0Xffff);
- bitset<16> b(0Xffff);
- bitset<16> b(10);
//用unsigned值初始化bitset对象
bitset<128> b(0Xffff);
bitset<32> b(0Xffff);
bitset<16> b(0Xffff);
bitset<16> b(10);
-
-
-
-
- string str("1100");
- bitset<16> b(str);
- string str("1000110011101111");
- bitset<4> b(str);
/*
*用string对象初始化bitset对象
*仍然是从右往左:string对象的最右边字符,用来初始化bitset对象的低阶位!
*/
string str("1100");
bitset<16> b(str);
string str("1000110011101111");
bitset<4> b(str); //从左边开始截取
-
-
-
-
- string str("1000110111101111");
- bitset<32> b(str,5,4);
/*
*截取的是1101
*但是保存的时候是从右往左填充bitset对象
*/
string str("1000110111101111");
bitset<32> b(str,5,4);
-
-
-
-
- string str("1000110011101111");
- bitset<32> b(str,str.size() - 5);
/*
*截取01111
*然后从右往左填充
*/
string str("1000110011101111");
bitset<32> b(str,str.size() - 5);
3、size_t类型
size_t类型是一个与机器相关的unsigned类型,其大小足以保证存储内存中对象的大小!
- size_t sz = bitvec.size();
size_t sz = bitvec.size();
4、bitset对象上的操作
- bool is_set = bitvec.any();
- bool is_not_set = bitvec.none();
- size_t sz = bitvec.count();
bool is_set = bitvec.any();
bool is_not_set = bitvec.none();
size_t sz = bitvec.count();
- for (size_t i = 0;i < bitvec.size(); ++i)
- bitvec[i] = 1;
- for (size_t i = 0;i != bitvec.size(); ++i)
- {
- bitvec.set(i);
- }
- bitvec.set();
- bitvec.reset();
for (size_t i = 0;i < bitvec.size(); ++i)
bitvec[i] = 1;
for (size_t i = 0;i != bitvec.size(); ++i)
{
bitvec.set(i);
}
bitvec.set();
bitvec.reset();
- for (size_t i = 0;i != bitvec.size(); ++i)
- {
- if (bitvec[i])
- cout << 1 ;
- else
- cout << 0 ;
- }
- for (size_t i = 0;i != bitvec.size(); ++i)
- {
- if (bitvec.test(i))
- cout << 1 ;
- else
- cout << 0 ;
- }
for (size_t i = 0;i != bitvec.size(); ++i)
{
if (bitvec[i])
cout << 1 ;
else
cout << 0 ;
}
for (size_t i = 0;i != bitvec.size(); ++i)
{
if (bitvec.test(i))
cout << 1 ;
else
cout << 0 ;
}
5、获取bitset对象的值
- unsigned long value = bitvec.to_ulong();
unsigned long value = bitvec.to_ulong();
-
- int main()
- {
- string str("00001000110011101111");
- bitset<20> bitvec(str);
-
- for (size_t i = 0;i != bitvec.size(); ++i)
- {
- if (bitvec.test(i))
- cout << 1 ;
- else
- cout << 0 ;
- }
- cout << endl;
- cout << bitvec << endl;
- }
//观察程序
int main()
{
string str("00001000110011101111");
bitset<20> bitvec(str);
for (size_t i = 0;i != bitvec.size(); ++i)
{
if (bitvec.test(i))
cout << 1 ;
else
cout << 0 ;
}
cout << endl;
cout << bitvec << endl;
}
- <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>
- <pre></pre>
- <pre></pre>
- <pre></pre>
- <pre></pre>
- <pre></pre>
- <pre></pre>
- </pre>
C++ Primer 学习笔记_9_标准库类型(续3) -- biteset
标签:c++ c++ primer bitset 二进制 标准库
原文地址:http://blog.csdn.net/selfi_xiaowen/article/details/46640321