Joe*_*ams 25

编译器很可能会优化那种东西.不要担心,在这种情况下只需编码清晰.

汇编语言往往有操作>=<=那些相同数量的步骤<>.例如,用摩托罗拉68K,如果要比较的数据寄存器%d0%d1如果和分支%d0大于或等于%d1,你会这样说:

cmp %d0, %d1  // compare %d0 and %d1, storing the result
              // in the condition code registers.
bge labelname // Branch to the given label name if the comparison
              // yielded "greater than or equal to" (hence bge)
Run Code Online (Sandbox Code Playgroud)

这是一个常见的错误,认为这a >= b意味着计算机将执行两个操作而不是一个操作,因为"或"在"大于或等于".


pax*_*blo 11

任何体面的编译器都会将这两个语句优化为完全相同的底层代码.实际上,它很可能会生成完全相同的代码:

if (!(!(!(!(!(!(!(num < 10))))))))
Run Code Online (Sandbox Code Playgroud)

只是因为它的意图似乎更清晰(轻度比你的第二个选择更清晰,我会选择第一个你的大量比怪物我上面贴更清晰).我倾向于考虑如何阅读它.想想这两句话:

  • 如果number大于或等于10.
  • 如果不是这个数字小于10的情况.

我相信第一个更清楚.

实际上,只需测试"gcc -s"以获取汇编程序输出,两个语句都会生成以下代码:

cmpl $9,-8(%ebp) ; compare value with 9
jle .L3          ; branch if 9 or less.
Run Code Online (Sandbox Code Playgroud)

我相信你在浪费时间看这样的微优化 - 你会更加高效地看待算法选择等事情.那里的投资回报可能会大得多.