Возьмите интеграл C ++ переменная i
, и предположим, что вы умножаете ее значение на 2.
Если i
имеет знак, я считаю, что операция в некоторой степени эквивалентна, по крайней мере математически , кому:
i = i << 1;
Но если тип i
беззнаковый, то, поскольку значения без знака не переполняются, а выполняются по модулю своего диапазона, предположительно операция выглядит примерно так:
i = (i << 1) & (decltype(i))-1;
Теперь , Я полагаю, что настоящие машинные инструкции, вероятно, будут более краткими, чем последовательность сдвигов для умножения. Но будет ли современный процессор, скажем, x86, иметь специальную инструкцию для беззнаковой / модульной математики? Или выполнение математики со значениями без знака будет стоить дополнительных инструкций по сравнению с математикой со значениями со знаком?
(Да, было бы нелепо заботиться об этом во время программирования; меня интересует чистое любопытство.)