天天看點

STL<bitset>用法介紹

參考: http://www.cplusplus.com/reference/bitset/bitset/bitset/

模闆:

template <size_t N> class bitset;
           

N指定了容器大小, 因為bitset是大小固定的容器。

構造函數:

預設構造函數用0填充,在使用參數構造時沒有被初始化到的位也用0填充。

bitset采用小端模式, 構造的時候從低位開始構造, 輸出的時候從高位開始輸出

(1)

bitset (unsigned long val);// 直接使用整數的二進制表示
           
bitset<8> foo(0x0f);
    rep(i, 0, 8-1)
        cout << i << ": " << foo[i] << endl;
    cout << "foo: " << foo << endl;
           

(2)

bitset (str) // 用字元串構造, 最後一個字元是最低位, 第一個字元是最高位
bitset (str, pos) // 指定從某個位置開始, 注意是 1 - n, 不是0 - n-1
           

注意:字元串用來初始化的時候是從後到前。

bitset<8> bar("00001111");
    rep(i, 0, 8-1)
        cout << i << ": " << bar[i] << endl;
    cout << "bar: " << bar << endl;
           

使用:

operator []   擷取第n個bit

count           傳回1的個數

size              傳回集合大小

test              測試某一位是否是1

set               将一個bit設為1

reset           将一個bit設為0

flip               翻轉該bit的值

類型轉換

to_string

to_ulong

to_ullong

C++中沒有基本類型來儲存一個bit, 但是可以用 bool 或者 bitset中定義的reference類型來儲存 [] 操作符擷取的bit。

當隻擷取值時(const qualified), 用bool就行了。

想要修改,則使用reference類型

bitset<8> foo(0x0f); // 00001111
    foo[2]=f[7]          // 00001011

    bitset<8>::reference bit = foo[0];
    bit = 0;   // 00001010
    cout << "foo: " << foo << endl;