原文: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
以上內容摘自 舉個栗子、 大佬的博客。