从`int`的向量到一个位序列

时间:2016-10-13 21:27:21

标签: c++ performance bit-manipulation bitwise-operators bit

y是一个无符号整数,表示一个位列表。 v是仅包含0和1的整数向量。我希望以有效的方式将v的值设置为y。我会做的

for (int i ; i<v.size() ; ++i)
{
  y ^= (-v[i] ^ y) & (1 << i);
}

这有效还是有更好的方法呢?

1 个答案:

答案 0 :(得分:0)

&#34;我问这个问题主要是为了提高我对按位操作的理解&#34; - 如果是这样的话:

你正在使用两个 ^ [xor] ops,一个&amp; [union] op和一个&lt;&lt; [left shift ] op,你可以通过使用一个&lt;&lt; [left shift] op和一个 | [intersect] op来实现相同的目的。

这样的事情:

for (int i; i < v.size(); ++i)
{
    y <<= 1;
    y |= v[i];
}