如何设置位?

时间:2017-07-04 13:07:39

标签: c++ bit-manipulation bit

我有一个远程服务,它接收许多参数和一个整数来标记哪些是null:

byte<(param_count + 7)/8> null bitmap

我尝试过一种天真的实施方式,但由于我没有移位经验,我宁愿不去展示它。

所以,给定一个布尔值矢量,我该如何创建位图?

1 个答案:

答案 0 :(得分:4)

如果在编译时知道param_count,您可以使用std::bitset。这是一个例子:

// Define a bitmap with 'param_count + 7' elements
std::bitset<param_count + 7> b;

// Set the fifth bit, zero is the first bit
b[4] = 1;

// Convert to 'unsigned long', and the casting it to an int.
int a = int(b.to_ulong());

如果在编译时param_count 已知,则可以使用std::vector<bool>。这是另一个例子:

// Define a bitmap with 'param_count + 7' elements
std::vector<bool> b(param_count + 7);

// Set the fifth bit, zero is the first bit
b[4] = 1;

// Convert to 'int'
int a = std::accumulate(b.rbegin(), b.rend(), 0, [](int x, int y) { return (x << 1) + y; });

std::vector<bool>int的转换取自this answer