Действительно ли умножение и деление с использованием операторов сдвига в C быстрее?

Умножение и деление могут быть выполнены с помощью битовых операторов, например

i*2 = i<<1
i*3 = (i<<1) + i;
i*10 = (i<<3) + (i<<1)

и т. Д.

Действительно ли быстрее использовать say (i << 3) + (i << 1 ) умножить на 10, чем напрямую использовать i * 10 ? Есть ли какие-то входные данные, которые нельзя умножить или разделить таким образом?

281
задан Peter Mortensen 15 June 2011 в 16:57
поделиться