【问题标题】:How to set bits?如何设置位?
【发布时间】:2017-07-04 13:07:38
【问题描述】:

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

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

我尝试了一个幼稚的实现,但由于我没有位移经验,所以我宁愿不展示它。

那么,给定一个布尔向量,我该如何创建我的位图?

【问题讨论】:

  • std::vector&lt;bool&gt; 是位图。就像std::bitseten.cppreference.com/w/cpp/utility/bitset
  • 如何将std::vector&lt;bool&gt; 转为整数?
  • 如果你使用bitset,你可以使用to_ulong的方法。 vector 实现可以在底层使用 bitset,但不是必须的。

标签: c++ bit-manipulation bit


【解决方案1】:

如果在编译时知道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&lt;bool&gt;。这是另一个例子:

// 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&lt;bool&gt;int 的转换取自this answer

【讨论】:

  • @Rakete1111 你说得对,我正在添加一个vector&lt;bool&gt; 版本。
  • param_count 在编译时未知。
猜你喜欢
  • 2018-11-18
  • 2016-01-01
  • 2015-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-30
  • 2012-12-27
相关资源
最近更新 更多