Является ли разница между целочисленным умножением (временно забывая о делении) по-прежнему в пользу сдвига, и если да, то насколько велика разница?
Это просто кажется такой низкоуровневой оптимизацией, даже если вы этого хотите, разве компилятор (C # / Java) для байт-кода или jit не должен его ловить в большинстве случаев?
Примечание. Я протестировал скомпилированный вывод для C# (с компилятором gmcs Mono C# версии 2.6.7.0), и в примерах умножения не использовался сдвиг для умножения даже при умножении на кратное 2.
C# http://csharp.pastebin.com/hcrRnPrb
cil http://csharp.pastebin.com/0js9F2c1
P.S. Я забыл, как может быть полезно использовать его для байтов, но все еще возникают проблемы с его использованием для чисел.