哪个运算符更快:!=或>

问题描述 投票:0回答:4

哪个运算符更快:>==

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

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

时间有类型“int”

c++ c
4个回答
2
投票

这个问题似乎没有意义。

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

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


14
投票

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

即,实现/平台定义。

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

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


7
投票

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

if(time > -1)

在这种情况下,写作会更好

if( time >= 0 )

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

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

if ( time != -1 )

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

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


7
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.