bitset 的定義和初始化:
1、bitset<size> b; //b 有 size 位,每位都是預設值 0
2、bitset<size> b(num); //b 是 unsigned long 型 num 的一個副本
3、bitset<size> b(str); //b 是 string 對象 str 中的位串副本,即 01 字元串
4、bitset<size> b(str, pos); //b 是 str 從位置 pos 開始的位串的副本 (從左往右)
5、bitset<size> b(str, pos, n); //b 是 str 中從位置 pos 開始,向後 n 位的副本
注:位是用來儲存一組項或條件的yes/no資訊的簡潔方法,标準庫提供了bitset類使得處理位集合更加友善
bitset 的幾個注意點:
1、bitset 最右邊為下标開始,而 string 最左邊!!!
2、bitset 支援位運算
3、可以通過下标來通路
4、包括函數:all(), any(), none(), test(), set([], []), reset([]), flip([]), size(), count(), to_string(zero, one), to_ullong(), to_ulong()
#include <iostream>
#include <string>
#include <bitset>
using namespace std;
int main()
{
// bs 為 unsigned long 137 的低 16 位拷貝
// to_ullong or to_ulong 傳回相應的值
bitset<16> bs(137);
cout<<bs.to_ullong()<<" 的低 16 位拷貝為:"<<bs<<endl;
// str 的值隻能為 0 或 1
string str = "10101101";
bitset<16> bs_t(str);
cout<<"二進制碼 "<<str<<" 對應的值為:"<<bs_t.to_ulong()<<endl;
// 從下标為 1 到字元串末尾的拷貝
bitset<16> bs_m(str, 1, str.size());
cout<<"除去二進制碼 "<<str<<" 的最高一位後相應的 bitset:"<<bs_m<<endl;
// bitset 支援 IO 流, 下面最多輸入 16 個 0 或 1
bitset<16> bs_n;
cout<<"請輸入不超過 16 個 0 或 1:";
cin>>bs_n;
cout<<"輸入的二進制碼的低 16 位為:"<<bs_n<<endl;
// to_string(zero, one) 預設 zero 為 '0',one為 '1'
cout<<"輸出二進制碼的字元串形式:"<<bs_n.to_string('*', '#')<<endl;
cout<<"輸入的二進制碼是否有置位了的:"<<boolalpha<<bs_n.any()<<endl;
cout<<"輸入的二進制碼是否全部置位了:"<<bs_n.all()<<endl;
cout<<"輸入的二進制碼是否全部沒有置位:"<<bs_n.none()<<endl;
// test(index) 會檢查下标越界,而 [] 則不檢查
cout<<"二進制碼的第一位是否被置位了:"<<bs_n.test(0)<<noboolalpha<<endl;
// count() 和 size() 的傳回類型為 size_t
cout<<"輸入的二進制碼有 "<<bs_n.count()<<" 個被置位了"<<endl;
cout<<"輸入的二進制碼大小為:"<<bs_n.size()<<endl;
// 通過 set(index, flag), reset(index), flip(index) 可實作更詳細的操作
cout<<"置位全部二進制碼:"<<bs.set()<<endl;
cout<<"複位全部二進制碼:"<<bs_n.reset()<<endl;
cout<<"改變全部二進制碼:"<<bs_n.flip()<<endl;
system("pause");
return 0;
}