Требует ли математика без знака дополнительных инструкций процессора?

Возьмите интеграл C ++ переменная i , и предположим, что вы умножаете ее значение на 2.

Если i имеет знак, я считаю, что операция в некоторой степени эквивалентна, по крайней мере математически , кому:

i = i << 1;

Но если тип i беззнаковый, то, поскольку значения без знака не переполняются, а выполняются по модулю своего диапазона, предположительно операция выглядит примерно так:

i = (i << 1) & (decltype(i))-1;

Теперь , Я полагаю, что настоящие машинные инструкции, вероятно, будут более краткими, чем последовательность сдвигов для умножения. Но будет ли современный процессор, скажем, x86, иметь специальную инструкцию для беззнаковой / модульной математики? Или выполнение математики со значениями без знака будет стоить дополнительных инструкций по сравнению с математикой со значениями со знаком?

(Да, было бы нелепо заботиться об этом во время программирования; меня интересует чистое любопытство.)

6
задан Lightness Races with Monica 4 March 2012 в 18:31
поделиться