首先看看bitset的定义:
A bitset stores bits (elements with only two possible values: 0 or 1, true or false, ...).
该类型的表现形式就是一系列的0/1,而且其每一位真的就是一个bit,不是 int 的 4bits/8bits,所以更节省空间。
template <size_t N> class bitset;
需要注意的是,因为是模板的 size_t N,所以需要在编译期确定其大小,并不能通过变量动态控制 bitset 的 size。
bitset<N> 中元素的编号是从右向左,由 0 到 N-1 逐渐增加。
构造
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() 区分
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);
转换
可以转换为string, ul, ull
to_string()
to_ulong()
to_ullong()
应用示例
// 获得数的二进制表示,并进行相应操作,此处为反序
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();
}
网友评论