我正在学习位标志并使用按位运算符手动创建位字段。然后我遇到了位集,这似乎是一种更简单、更清洁的存储位字段的方法。我理解使用位字段的价值,以尽量减少内存使用。但是,在测试 sizeof(bitset) 之后,我很难理解这是一种更好的方法。
考虑:
#include <bitset>
#include <iostream>
int main ()
{
// Using Bit Set, Size = 8 Bytes
const unsigned int i1 = 0;
const unsigned int i2 = 1;
std::bitset<8> mySet(0);
mySet.set(i1);
mySet.set(i2);
std::cout << sizeof(mySet) << std::endl;
// Manually managing bit flags
const unsigned char t1 = 1 << 0;
const unsigned char t2 = 1 << 1;
unsigned char bitField = 0;
bitField |= t1 | t2;
std::cout << sizeof(bitField) << std::endl;
return 0;
}
输出是:
mySet 是 8 个字节。位域为 1 个字节。
如果需要最少的内存使用量,我不应该使用 std::bitset 吗?