Сдвиг бита несколько раз или сохранение смещения один раз как маска

Я использую цикл для манипулирования несколькими переменными, используя битовые значения, как я иду. Я заметил, что я использую выражения if (some_state & (1 << i)), а также some_var &= ~(1 << i) в десятки раз раньше i увеличивается

Эта процедура должна выполняться при регулярном прерывании, и мои основные часы не такие быстрые, поэтому я задаюсь вопросом, это лучшее, что я могу сделать. В моей голове это много операций.

Может быть, я мог бы сохранить смещенное значение и использовать его вместо этого.

for (int i=0; i<MAX; ++i) {
uint32_t mask_value = (1 << i);
if (some_state & mask_value) {
if (! --some_array[i].timer_value) {
some_var |= mask_value;
another_var &= ~mask_value;
}
}
...
}

Есть ли какой-либо четкий ответ? Возможно, это в большей степени ситуация, когда компилятор может оптимизировать до какого-то неизвестного уровня, поэтому кто может знать, пока я не выполню подпрограммы 10000 раз, проверим их время и сравню?

ОБНОВИТЬ:

Я использую GNU ARM Embedded Toolchain для моего микроконтроллера NXP LPC11 ARM (Cortex-M0).

Должно быть достаточно разумно, чтобы просмотреть сборку в IDE (на основе LPCXpresso, Eclipse) и профилировать ее.

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …