std::bitset
出自 cppreference.com
| 定義於標頭 <bitset> |
||
| template< std::size_t N > class bitset; |
||
類別模板 bitset 表示一個大小固定的 N 位元序列。Bitset 可透過標準邏輯運算子進行操作,並能與字串及整數互相轉換。就字串表示法以及移位運算的方向命名而言,該序列被視為將索引最低的元素置於右側,如同整數的二進位表示法一般。
bitset 符合 CopyConstructible(可複製建構)與 CopyAssignable(可複製賦值)的需求。
|
|
(自 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 的串流輸入與輸出 (函式模板) |
[編輯] 輔助類別
| (C++11) |
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::bitset 與 std::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) | 用於存取、操作及處理個別位元與位元序列的工具 |