2016-10-13 3 views
0

y - целое число без знака, которое представляет список бит. v - это вектор целых чисел, содержащий только 0 и 1. Я хотел бы установить значения v в y эффективным образом. Я бы сделалОт вектора `int` до последовательности бит

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

Это эффективный или есть лучший способ сделать это?

+0

ли 'v [0]' представляют наименьший значащий бит или старший бит? Ваш код должен отличаться в зависимости от ответа на этот вопрос. –

+1

Может быть что-то использовать 'std :: bitset'. Воздерживаться, используя 'std :: vector '. Также определите __efficient пожалуйста. –

+1

Вы знаете о большой фразе о «преждевременной оптимизации» Дональда Кнута. Надеюсь, – agg3l

ответ

0

«Я задал этот вопрос в основном, чтобы улучшить свое понимание поразрядными манипуляций» - Если это так, то:

Вы используете два ^ [исключающее] опс, один & [объединение] оп и один < < [сдвиг влево] оп, вы можете добиться того же с помощью одного < < [сдвиг влево] оп и один | [intersect] op.

Что-то вроде этого:

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

Это отменяет порядок, но, по-видимому, OP в порядке с этим – harold

Смежные вопросы