使用 bitset 前, 先引入
#include <bitset>
以下說明之變數類型:
string : s;
bitset : b, b0, b1;
size_t : pos, cnt;
1. 建構式(Constructor)
(1.1) 建立10bits 之 bitset
bitset<10> b;
(1.2) 建立10bits 之 bitset,並以無號數(長)整數初始化 bitset
bitset<10> b(222UL);
(1.3) 以字串初始化 bitset
s = "1001101";
bitset<10> b(s);
若 s = "101XXX101";
bitset<10> b(s)
執行期將發生錯誤
2. Overload
(2.1) NOT 運算
b = !b0;
(2.2) AND 運算
b = b0 & b1;
(2.3) OR 運算
b = b0 | b1;
(2.4) XOR 運算
b = b0 ^ b1;
(2.5) 足標運算
b[0] = 1, b1[1] = b2[1];
3. 移位運算
(3.1) 左移(SHL) 運算
b = b0 << 2;
(3.2) 右移(SHR) 運算
b = b0 >> 2;
4. 位元個數 計算
(4.1) 判別bitet 位元數大小
b.size();
(4.2) 判別是否有 '1'
b.any();
(4.3) 判別是否沒 '1'
b.none();
(4.4) 判別 '1' 之個數
cnt = b.count();
(4.5) 判別 '0' 之個數
cnt = b.size() - b.count();
5. 位元運算
(5.1) 每個位元反向
b.flip();
b = ~b;
(5.2) 第 pos 位元反向
b.flip(pos);
b[pos] = ~b[pos];
(5.3) 每個位元設 '0'
b.reset();
(5.4) 第 pos 位元設 '0'
b.reset(pos);
b.set(pos, 0);
b[pos] = 0;
(5.5) 每個位元設 '1'
b.set();
(5.6) 第 pos 位元設 '1'
b.set(pos);
b.set(pos, 1);
b[pos]=1;
(5.7) 測試第 pos 是否為 '1'
if( b.test(pos)) // statement
if( b[pos] ) // statement
6. bitset 轉 string, unsigned long
(6.1) 轉 string
s = b.to_string<char, char_traits<char>, allocator<char>> ();
s = b.to_string();
(6.2) 轉 unsigned long
unsigned long x = b.to_ulong();
7. cin, cout
(7.1) cin
若 cin >> b;
輸入 "0110xx1100",則 b 為 "0110"
(7.2) cout
cout << b;
顯示 b 之內容,長度為 b.size();
ex:
bitset<8> b(string("1001"));
cout << b << endl;
顯示 00001001
留言列表