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時候才可以

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM