命名空間
變體
動作

std::bitset

出自 cppreference.com
< cpp‎ | 工具
 
 
 
 
定義於標頭 <bitset>
template< std::size_t N >
class bitset;

類別模板 bitset 表示一個大小固定的 N 位元序列。Bitset 可透過標準邏輯運算子進行操作,並能與字串及整數互相轉換。就字串表示法以及移位運算的方向命名而言,該序列被視為將索引最低的元素置於右側,如同整數的二進位表示法一般。

bitset 符合 CopyConstructible(可複製建構)與 CopyAssignable(可複製賦值)的需求。

std::bitset 的所有成員函式皆為 constexpr:這意味著可以在常數表達式的求值過程中建立並使用 std::bitset 物件。

(自 C++23 起)

目錄

[編輯] 模板參數

N - 要配置儲存空間的位元數量

[編輯] 成員類型

代表位元引用的代理類別
(class)

[編輯] 成員函式

建構 bitset
(公開成員函式) [編輯]
(於 C++20 中移除)
比較內容
(公開成員函式) [編輯]
元素存取
存取特定位元
(公開成員函式) [編輯]
存取特定位元
(公開成員函式) [編輯]
檢查所有、任意或沒有位元被設為 true
(公開成員函式) [編輯]
回傳被設為 true 的位元數量
(公開成員函式) [編輯]
容量
回傳 bitset 所容納的位元數量
(公開成員函式) [編輯]
修改器
執行二進位 AND、OR、XOR 和 NOT
(公開成員函式) [編輯]
執行二進位左移與右移
(公開成員函式) [編輯]
將位元設為 true 或指定值
(公開成員函式) [編輯]
將位元設為 false
(公開成員函式) [編輯]
切換位元值
(公開成員函式) [編輯]
轉換
回傳資料的字串表示法
(公開成員函式) [編輯]
回傳資料的 unsigned long 整數表示法
(公開成員函式) [編輯]
(C++11)
回傳資料的 unsigned long long 整數表示法
(公開成員函式) [編輯]

[編輯] 非成員函式

對 bitset 執行二進位邏輯運算
(函式模板) [編輯]
執行 bitset 的串流輸入與輸出
(函式模板) [編輯]

[編輯] 輔助類別

std::bitset 的雜湊(hash)支援
(類別樣板特例化) [編輯]

[編輯] 附註

若 bit-set 的大小在編譯時期未知,或是需要在執行時期更改大小,則可改用動態類型,例如 std::vector<bool>boost::dynamic_bitset<>

功能測試巨集 數值 標準 功能
__cpp_lib_constexpr_bitset 202207L (C++23) 更具 constexpr 特性的 std::bitset
__cpp_lib_bitset 202306L (C++26) std::bitsetstd::string_view 的介接

[編輯] 範例

#include <bitset>
#include <cassert>
#include <cstddef>
#include <iostream>
 
int main()
{
    typedef std::size_t length_t, position_t; // the hints
 
    // constructors:
    constexpr std::bitset<4> b1;
    constexpr std::bitset<4> b2{0xA}; // == 0B1010
    std::bitset<4> b3{"0011"}; // can also be constexpr since C++23
    std::bitset<8> b4{"ABBA", length_t(4), /*0:*/'A', /*1:*/'B'}; // == 0B0000'0110
 
    // bitsets can be printed out to a stream:
    std::cout << "b1:" << b1 << "; b2:" << b2 << "; b3:" << b3 << "; b4:" << b4 << '\n';
 
    // bitset supports bitwise operations:
    b3 |= 0b0100; assert(b3 == 0b0111);
    b3 &= 0b0011; assert(b3 == 0b0011);
    b3 ^= std::bitset<4>{0b1100}; assert(b3 == 0b1111);
 
    // operations on the whole set:
    b3.reset(); assert(b3 == 0);
    b3.set(); assert(b3 == 0b1111);
    assert(b3.all() && b3.any() && !b3.none());
    b3.flip(); assert(b3 == 0);
 
    // operations on individual bits:
    b3.set(position_t(1), true); assert(b3 == 0b0010);
    b3.set(position_t(1), false); assert(b3 == 0);
    b3.flip(position_t(2)); assert(b3 == 0b0100);
    b3.reset(position_t(2)); assert(b3 == 0);
 
    // subscript operator[] is supported:
    b3[2] = true; assert(true == b3[2]);
 
    // other operations:
    assert(b3.count() == 1);
    assert(b3.size() == 4);
    assert(b3.to_ullong() == 0b0100ULL);
    assert(b3.to_string() == "0100");
}

輸出

b1:0000; b2:1010; b3:0011; b4:00000110

[編輯] 參閱

節省空間的動態 bitset
(類別模板特化) [編輯]
位元操作 (C++20) 用於存取、操作及處理個別位元與位元序列的工具
English Deutsch 日本語 中文(简体) 中文(繁體)