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