bitset

首先看看bitset的定义:

A bitset stores bits (elements with only two possible values: 0 or 1, true or false, ...).

该类型的表现形式就是一系列的0/1,而且其每一位真的就是一个bit,不是 int 的 4bits/8bits,所以更节省空间。

template class bitset;

需要注意的是,因为是模板的 size_t N,所以需要在编译期确定其大小,并不能通过变量动态控制 bitset 的 size。

bitset 中元素的编号是从右向左,由 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();
}

你可能感兴趣的:(bitset)