Это полностью зависит от ISA, для которого вы компилируете, и качества оптимизатора вашего компилятора. Не оптимизируйте преждевременно: сначала профиль , чтобы найти узкие места .
Тем не менее, в x86 вы обнаружите, что оба одинаково быстры в большинстве случаев. В обоих случаях у вас будут инструкции сравнения (cmp
) и условного перехода (jCC
). Однако для (x < 0)
могут быть случаи, когда компилятор может исключить инструкцию cmp
, ускоряя ваш код на один полный цикл .
В частности, если значение x
хранится в регистре и недавно было результатом арифметической операции (такой как add
или sub
, но есть еще много возможностей), которая устанавливает флаг знака SF в регистре EFLAGS нет необходимости в инструкции cmp
, и компилятор может выдавать только инструкцию js
. Там нет простой jCC
инструкция, которая переходит, когда ввод был -1.