Выполнение таких глупых «оптимизаций» вручную на языке высокого уровня ничего не даст, кроме как показать людям, что вы не знакомы с современными технологиями и методами программирования.
Если вы пишете на ассемблере напрямую, имеет смысл беспокоиться об этом, но это не так.
С учетом вышесказанного, есть несколько случаев, когда компилятор не сможет оптимизировать что-то подобное. Рассмотрим массив возможных мультипликативных факторов, каждый из которых состоит ровно из 2 ненулевых битов, с кодом, подобным:
x *= a[i];
Если профилирование показывает, что это является основным узким местом в вашей программе, вы можете заменить его следующим:
x = (x<<s1[i]) + (x<<s2[i]);
до тех пор, пока вы планируете измерять результаты. Однако я подозреваю, что редко можно найти ситуацию, в которой это могло бы помочь или где это было бы возможно. Это возможно только для ЦП со слабой единицей умножения по сравнению со сдвигами и общей пропускной способностью команд.