哪个运营商更快:!=或>

时间:2015-11-20 11:43:31

标签: c++ c

哪个运算符更快:>==

示例:我想测试一个值(可以有一个正值或-1)对-1:

if(time > -1)
// or
if (time != -1)

时间类型为“int”

4 个答案:

答案 0 :(得分:14)

标准没有说。因此,它取决于给定编译器在给定版本中生成的操作码,以及给定CPU执行它们的速度。

即,实施/平台定义

通过查看/基准测试可执行代码,您可以找到特定的编译器/平台组合。

但我非常怀疑它会带来多大的影响;这种微观优化几乎总是被更高级别的架构决策相形见绌。

答案 1 :(得分:7)

从语义上讲,这些条件是不同的。第一个检查对象time是正还是零。

if(time > -1)

在这种情况下,最好写

if( time >= 0 )

但是某些函数返回非负值或-1。例如,如果搜索函数没有在数组中找到元素,则它可以返回-1。或-1表示错误状态或缺少值。

在这种情况下,最好使用条件

if ( time != -1 )

至于编译器在两种情况下只能生成一条mashine指令进行比较的速度。

当你考虑速度时,情况并非如此。你应该考虑哪种情况更具表现力,并表明程序员的意图。

答案 2 :(得分:7)

它取决于平台。通常,这两个操作将直接转换为汇编程序指令“如果大于”则分支,而“如果不相等则分支”。这两者之间不太可能存在任何性能差异,如果存在性能差异,则不会产生重大影响。

唯一比其他分支指令快得多的分支指令通常是“如果为零则分支”/“如果不为零则分支”。

(在编译器糟糕的黑暗时代,C程序员因此喜欢将循环写为向下计数为零,而不是向上计数,以便对零而不是值进行比较,以获得几纳秒。现代编译器可以自己进行优化,但你仍然会偶尔看到这样的循环。)

一般而言,您不应该关注性能的微观管理。如果你花时间思考>是否比!=更快,而不是考虑程序设计,可读性和功能,你需要尽快设置优先级。

答案 3 :(得分:2)

这个问题似乎毫无意义。

不要过早优化,首先关注根据规范或实际情况使代码尽可能清晰可读。对于其他程序员,if(time > -1)if(time != -1)可能有不同的意图。不要让他们(以及3个月后自己)感到困惑。

如果必须这样做,优化必须先进行测量,并且测量必须先于优化目标。