首页 > 编程语言 > 详细

C++标准库中bitset类型

时间:2014-02-24 00:54:48      阅读:377      评论:0      收藏:0      [点我收藏+]
虽然在C++的基本类型中,似乎没有二进制这个重要的类型,但是在C++标准库中却提供了能够处理二进制位的有序集合类型,这就是

bitset类型,使用该类型时需要先包含该头文件并进行声明:

#include <bitset>
using namespace std;

该类型存储的是一个有序的二进制数据的集合,该集合的长度值需要在构造该类型时在尖括号中给出(因为该类型实际上也是一种类模版)。

一、bitset类型的初始化方式
一共有四种初始化方式:
For Example:

//bitset对象的初始化
	//方法一
	bitset<32> b; //直接构造一个空对象,其中的每一位都默认为0
	//方法二
	unsigned long a =32;
	bitset<32> b1(a);  //构造成一个unsigned long类型的二进制副本
	//方法三
	string a1("10001100001111001");
	bitset<17> b2(a1); //构造成一个含有二进制位串的副本
	//方法四
	bitset<10> b3(a1,1,10);//构造成从a1的1位置开始的10个位的副本

二、对于该二进制集合的访问方式

只能以位置的方式来访问其中每一个二进制元素,即以下标的方式来访问,但需注意的是像数组集合一样,该集合的下标也是从0开始的。

 //按照下标的位置来访问该二进制集合
	for(int i = 0;i<15;i++)
	{
		cout<<b2[i]<<flush;//输出:100111100001100
	}

三、输出二进制位
与一般容器集合不同的是bitset二进制集合可以直接用输出操作符进行正题输出。

 cout<<"b:"<<b<<endl;//输出:00000000000000000000000000000000
	cout<<"b1:"<<b1<<endl;//输出:00000000000000000000000000100000
	cout<<"b2:"<<b2<<endl;//输出:10001100001111001
	cout<<"b3:"<<b3<<endl;//输出:0001100001

四、对于bitset对象的值的获取

有两种获取方式:分别是:转换成一个unsigned long的整数类型  (调用成员函数:.to_ulong())
                        转换成一个包含该集合所有二进制位的字符串    (调用成员函数:.to_string())

   string str("0001110001");
   bitset<10> bitver(str);
   //转换成一个unsigned long的整数类型 
   unsigned long ul = bitver.to_ulong();//输出113
   cout<<ul<<endl;
   //转换成一个包含该集合所有二进制位的字符串
   string ss = bitver.to_string();//输出0001110001
   cout<<ss<<endl;

五、利用内置成员函数对真个bitset对象进行设置

.set() //将所有的二进制位都设置为1
.reset() //将所有的二进制位都设置为0
.size() //返回集合的大小
.set[pos] //将pos位置的二进制位设置为1
.reset[pos]  //将pos位置的二进制位设置为0
.flip() //将所有的二进制位都取反
.flip(pos)   //将pos位置的二进制位取反
//。。。。

六、bitset集合最重要的特性是此类也支持内置的位操作符

但须注意的是:bitset集合按位运算的对象只能是也是一个bitset集合,而不能与一个整数进行按位运算。
For Example:

#include<iostream>
#include<bitset>
#include<string>
#include<vector>
using namespace std;
int main()
{
   string str("0001110001");
   bitset<10> bitver(str);
   //取反
   bitver =  ~bitver;
   cout<<bitver<<endl;//输出1110001110
   //左移两位
   bitset<10> b1 = bitver<<2;
   cout<<"b1"<<b1<<endl;//输出1000111000
   //右移两位
   bitset<10> b2 =  bitver>>2;
   cout<<"b2"<<b2<<endl;//输出0011100011
   //按位与&
   unsigned long  a = 1;
   bitset<10> a1(a);
   cout<<"a1"<<a1<<endl;//输出0000000001
   bitset<10> b3 =  bitver & a1; 
   cout<<"b3"<<b3<<endl;//输出0000000000
   return 0;
}

C++标准库中bitset类型

原文:http://blog.csdn.net/yyc1023/article/details/19756083

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!