使用 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

edisonx 發表在 痞客邦 PIXNET 留言(0) 人氣()