标准库 bitset

作用

  有些程序要处理二进制的有序集,每个位都可能包含0和1值。位是用来保存一组项或条件的yes/no信息(有时也称标志)的简洁方法。标准库提供的bitset类简化了位集的处理。

声明

  #include

  using namesapce std;

bitset类对象的定义和初始化

  类似于vector,bieset类是一种类模板;而与vector不一样的是bitset类型对象的区别在于其长度而不在于其类型。在定义bitset时,要明确bitset有多少位,须在尖括号内给出它的长度值:

                                                       初始化bitset类的方法

                                        标准库 bitset_第1张图片

用unsigned 值初始化bitset对象

  当用unsigned long 值作为bitset对象的初始值时,该值将自动转化为二进制的位模式。例:bitset<32> n(15) 。

如果bitset类长度大于unsigned long 值的二进制位数,则其余的高阶位将置为0;如果长度小于 unsigned long 值的二进制位数,则只使用unsigned 值中的低阶位,超过bitset 类型长度的高阶位将被丢弃。

用 string 对象初始化 bitset 对象

   当用 string 对象初始化 bitset 对象时,string 对象直接表示为位模式。从 string 对象读入位集的顺序是从右向左:

string strval("1100");

bitset<32> bitvec(strval);

bitset位模式中第2和第3的位置为1,其余位置为0。

string 对象和 bitset 对象之间是反向转化的:string 对象的最右边字符(即下标最大的那个字符)用来初始化bitset 对象的低阶位(即下标为0的位)。

不一定要把整个string 对象都作为bitset 对象的初始值。相反,可以只用某个子串作为初始值:

string str("1111111000000011001101");

bitset<32> bitvec(str,5,4); //这里用str从str[5]开始包含的四个子符的子串来初始化 bitvec。

botset<32> bitvec(str,str.size()-4); //取出str末尾的四位来对bitvec的低四位进行初始化,其余为初始化为0。

bitset对象上的操作

#include 
#include 
using namespace std;
int main()
{
	// n有4位且每位都为0 
	bitset<4> n;
	cout << n << endl;
	
	// b有8位,将15转为2进制对b初始化 
	bitset<8> n(15);
	cout << n << endl;
	
	// 有位被设置为1则返回为真,否则返回为假 
	cout << n.any() << endl; 
	
	// n中被设置为1的位的个数 
	cout << n.count() << endl; 
	
	// 反置 0->1   1->0 
	cout << n.flip() << endl; 
	
	// 反置某一位置   从低位开始 
	cout << n.flip(5) << endl; 	
	
	// 重置全为0 (也可指定位置)
	cout << n.reset() << endl; 
	
	// 全部置为1 
	cout << n.set() << endl;
	 
	// n能容纳的位 
	cout << n.size() << endl;
	
	// 函数返回在pos上的位的值
	cout << n.test(2) << endl; 
	
	// 函数返回bitset的字符串形式
	cout << n.to_string() << endl;
	
	// 返回bitset的无符号长整数形式
	// 转化为10进制 
	cout << n.to_ulong() << endl;
	return 0;
} 

                                                                                                                                 摘自《C++primer》

你可能感兴趣的:(C++primer)