Любой приличный компилятор оптимизирует эти два оператора в соответствии с одним и тем же базовым кодом. Фактически, он, скорее всего, сгенерирует точно такой же код для:
if (!(!(!(!(!(!(!(num < 10))))))))
Я бы выбрал первое из вас только потому, что его намерение кажется намного более ясным (мягче, чем ваш второй выбор, значительно яснее, чем то чудовище, которое я опубликовал выше). Я склонен думать с точки зрения того, как бы я это прочитал. Подумайте о двух предложениях:
- если число больше или равно десяти.
- если это не так, число меньше десяти.
Я считаю, что первый будет более ясным.
Фактически, просто тестируя с помощью "gcc -s"
, чтобы получить вывод на ассемблере, оба оператора генерируют следующий код:
cmpl $9,-8(%ebp) ; compare value with 9
jle .L3 ; branch if 9 or less.
Я полагаю, что вы тратите свое время на такие микрооптимизации, как вы, - вам гораздо эффективнее смотреть на такие вещи, как выбор алгоритма. Там, вероятно, будет гораздо большая отдача от инвестиций.