从“int”向量到位序列
From a vector of `int` to a sequence of bits
y
是一个无符号整数,表示位列表。 v
是一个仅包含 0 和 1 的整数向量。我想以有效的方式将 v
的值设置为 y
。我愿意
for (int i ; i<v.size() ; ++i)
{
y ^= (-v[i] ^ y) & (1 << i);
}
这是有效的还是有更好的方法?
"I asked the question mainly to improve my understanding of bitwise manipulations" - 如果是这样的话:
您正在使用两个 ^ [xor] 操作,一个 & [union] 操作和一个 << [left shift] op,你可以通过使用一个 << [left shift] op 和一个 | [相交] 操作。
像这样:
for (int i; i < v.size(); ++i)
{
y <<= 1;
y |= v[i];
}
y
是一个无符号整数,表示位列表。 v
是一个仅包含 0 和 1 的整数向量。我想以有效的方式将 v
的值设置为 y
。我愿意
for (int i ; i<v.size() ; ++i)
{
y ^= (-v[i] ^ y) & (1 << i);
}
这是有效的还是有更好的方法?
"I asked the question mainly to improve my understanding of bitwise manipulations" - 如果是这样的话:
您正在使用两个 ^ [xor] 操作,一个 & [union] 操作和一个 << [left shift] op,你可以通过使用一个 << [left shift] op 和一个 | [相交] 操作。
像这样:
for (int i; i < v.size(); ++i)
{
y <<= 1;
y |= v[i];
}