bitset初始化问题

     在C++primer上面说,bitset可以用unsigned long来进行初始化,但是上面的例子只是采用了常数如0xffff,而在实际中,当在vs2010中,我采用unsigned long类型的变量来进行初始化时,发现说出现错误,

error C2668: “std::bitset<_Bits>::bitset”: 对重载函数的调用不明确

测试了下,int是4个字节,unsigned long 4个字节,long也是4个字节,但是int 和long都可以用来进行初始化

下面是c++primer里关于bitse采用unsigned long和string进行初始化的讲解,其中尤为注意的是,在bitset中是数的低位在前高位在后

 

下面是转载的相关的bitset的内容:

功能:处理二进制位的有序集

#include<bitset>

using std::bitset;

 

  初始化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个位的副本

注意:n必须是常量表达式。

 

例如:

   bitset<16> bitvec1(0xffff);   // bits 0 ... 15 are set to 1

   bitset<32> bitvec2(0xffff);    // bits 0...15 are set to 1; 16...31 are 0

   从string对象读入位集的的顺序是从右向左的

   string strval("1100");

   bitset<32> bitvec3(strval);

string对象和bitset对象之间是反向转化的:string对象的最右边字符(即下标最大的那个字符)用来初始化bitset对象的低阶位(即下标为0的位)。当用string对象初始化bitset对象时,记住这一差别很重要。

 

   bitset对象的操作

 

b.any()

b中是否存在置为1的二进制位?

b.none()

b中不存在置为1的二进制位吗?

b.count()

b中置为1的二进制位的个数

b.size()

b中二进制位的个数

b[pos]

访问b中在pos处的二进制位

b.test(pos)

b中在pos处的二进制位是否为1?

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流

 

 

bitset<32> bitvec;   //32bits,all zero

bool is_set=bitvec.any();  //false,all bits are zero

bool is_not_set=bitvec.none();   //true,all bits are zero

size_t bits_set=bitvec.count();   //返回一个size_t类型的bits_set值,统计1的个数

size_t类型是一个与机器相关的unsigned类型,大小足够。

 

可以用下表操作符来读写或测试某个索引位置的二进制位:

for(int index=0;index!=32;index++){

   bitvec[index]=0;

}   //用下表操作符将所有位都置为零

 

for(int index=0;index!=32;index++){

   bitvec.set(index);

}   //用set操作将所有位都置为1

 

if(bitvec.test(i))

//测试第i位是否为1

 

if(bitvec[i])

//与上一个函数功能相同

 

bitvec.set();   //全部置一

bitvec.reset();  //全部置零

 

unsigned long ulong=bitvec.to_ulong();

cout<<"ulong="<<ulong<<endl;   //当bitvec的长度小于unsigned long时候才可以

 

posted @ 2015-05-01 14:59  弱水三千12138  阅读(4901)  评论(0编辑  收藏  举报