Сегодня я наткнулся на этот отрывок:
На большинстве старых микропроцессоров побитовые операции выполняются немного быстрее, чем операции сложения и вычитания, и обычно значительно быстрее операций умножения и деления. В современных архитектурах это не так: побитовые операции обычно имеют ту же скорость, что и сложение (хотя и быстрее, чем умножение).
Мне любопытно, почему побитовые операции были немного быстрее, чем операции сложения / вычитания на старых микропроцессорах.
Все, что я могу думать о том, что это вызовет задержку, - это то, что схемы для реализации сложения / вычитания зависят от нескольких уровней логических вентилей (параллельные сумматоры и еще много чего), тогда как побитовые операции имеют гораздо более простые реализации схем. Это причина?
Я знаю, что и арифметические, и побитовые операции на современных процессорах выполняются за один цикл, но, говоря чисто о времени распространения для схемы, теоретически сохраняется ли задержка в современных процессорах?
Наконец, у меня возник концептуальный вопрос C о выполнении операции побитового сдвига:
unsigned x = 1;
x <<= 5;
unsigned y = 0;
y += 32;
И x
, и y
должны содержать значение 32
, но потребовалось ли 5 отдельных сдвигов влево, чтобы получить x
к этому значению (как, например, побитовые сдвиги, реализованные через каналы)? Чтобы уточнить, я спрашиваю исключительно о поведении схемы, а не о количестве тактов.
add
так же быстро, какxor
. agner.org/optimize/. ) Сдвиг на 1, тем не менее, был бы разумным примером; многие простые процессоры поддерживают сдвиги только на 1 или требуют 1 цикла на счет. - person Peter Cordes   schedule 01.05.2018