首先看看bitset的定義:
A bitset stores bits (elements with only two possible values: 0 or 1, true or false, ...).
該類型的表現(xiàn)形式就是一系列的0/1峦树,而且其每一位真的就是一個bit辣辫,不是 int 的 4bits/8bits,所以更節(jié)省空間魁巩。
template <size_t N> class bitset;
需要注意的是急灭,因為是模板的 size_t N,所以需要在編譯期確定其大小谷遂,并不能通過變量動態(tài)控制 bitset 的 size葬馋。
bitset<N> 中元素的編號是從右向左,由 0 到 N-1 逐漸增加肾扰。
構(gòu)造
std::bitset<8> foo;
std::bitset<16> bar (0xfa2); // 0000 1111 1010 0010
std::bitset<16> baz (std::string("0101111001")); // 0000000101111001
std::bitset (
string, // source
pos, // start position
n, // number of characters to read
charT zero = charT('0'), // character represent 0
charT one = charT('1')); // character represent 1
訪問
[]
test(size_t pos) // read-only, range safe.
size()
count() // number of bits set as '1', 注意和 size() 區(qū)分
any() // any bit is '1' ?
none() // none bit is '1' eq all bits are '0'
all() // all bits are '1'
修改
set -- to 1
reset -- to 0
flip -- from 1 to 0, or from 0 to 1
bitset& set() // set all bits to one/true
bitset& set (size_t pos, bool val = true); // set bits[pos] = val
bitset& reset();
bitset& reset (size_t pos);
bitset& flip();
bitset& flip(size_t pos);
轉(zhuǎn)換
可以轉(zhuǎn)換為string, ul, ull
to_string()
to_ulong()
to_ullong()
應(yīng)用示例
// 獲得數(shù)的二進制表示点楼,并進行相應(yīng)操作,此處為反序
uint64_t reverse_bits_v2(uint64_t val) {
std::string bits = std::bitset<64>(val).to_string();
std::reverse(bits.begin(), bits.end());
return std::bitset<64>(bits).to_ulong();
}