C++ bitset用法小結

原文:https://blog.csdn.net/weixin_44529350/article/details/102983704

C++的 bitset 在 bitset 頭文件中,它是一種類似數組的結構,它的每一個元素只能是0或1,每個元素僅用1bit空間。

常用函數:

 bitset<8> foo ("10011011");

 cout << foo.count() << endl;  //5  (count函數用來求bitset中1的位數,foo中共有5個1
 cout << foo.size() << endl;   //8  (size函數用來求bitset的大小,一共有8位

 cout << foo.test(0) << endl;  //true  (test函數用來查下標處的元素是0還是1,並返回false或true,此處foo[0]爲1,返回true
 cout << foo.test(2) << endl;  //false  (同理,foo[2]爲0,返回false

 cout << foo.any() << endl;  //true  (any函數檢查bitset中是否有1
 cout << foo.none() << endl;  //false  (none函數檢查bitset中是否沒有1
 cout << foo.all() << endl;  //false  (all函數檢查bitset中是全部爲1

注:test函數會對下標越界作出檢查,而通過 [ ] 訪問元素卻不會經過下標檢查,所以,在兩種方式通用的情況下,選擇test函數更安全一些。

  bitset<8> foo ("10011011");

  cout << foo.flip(2) << endl;  //10011111  (flip函數傳參數時,用於將參數位取反,本行代碼將foo下標2處"反轉",即0變1,1變0
    cout << foo.flip() << endl;   //01100000  (flip函數不指定參數時,將bitset每一位全部取反

  cout << foo.set() << endl;    //11111111  (set函數不指定參數時,將bitset的每一位全部置爲1
  cout << foo.set(3,0) << endl;  //11110111  (set函數指定兩位參數時,將第一參數位的元素置爲第二參數的值,本行對foo的操作相當於foo[3]=0
  cout << foo.set(3) << endl;    //11111111  (set函數只有一個參數時,將參數下標處置爲1

  cout << foo.reset(4) << endl;  //11101111  (reset函數傳一個參數時將參數下標處置爲0
  cout << foo.reset() << endl;   //00000000  (reset函數不傳參數時將bitset的每一位全部置爲0

類型轉換。

 bitset<8> foo ("10011011");

 string s = foo.to_string();  //將bitset轉換成string類型
 unsigned long a = foo.to_ulong();  //將bitset轉換成unsigned long類
 unsigned long long b = foo.to_ullong();  //將bitset轉換成unsigned long long類型

 cout << s << endl;  //10011011
 cout << a << endl;  //155
 cout << b << endl;  //155

以上內容摘自  舉個栗子、 大佬的博客。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章