#include <iostream>
using namespace std;
int main()
{
int v = 0;
for(int i = 0; i < 2000 * 1000 * 1000; ++i) {
v ^= i >> 1; /* i / 2 */
}
cout << v << endl;
return 0;
}
Если битовый сдвиг заменить обычным делением, то время выполнения не изменится. Обе операции насколько мне известно занимают 1 такт. Запускал на x64.
Существуют ли архитектуры (arm, mips, ...), для которых эти и другие известные трюки - полноправная оптимизация?
UPD: при делении на 3, разница между сдвигом и делением ощутимая. Вопрос: как так, ведь обе инструкции за 1 такт выполняются?