哪个运算符更快:>
或==
?
示例:我想测试一个值(可以有一个正值或-1)对-1:
if(time > -1)
// or
if (time != -1)
时间类型为“int”
答案 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个月后自己)感到困惑。
如果必须这样做,优化必须先进行测量,并且测量必须先于优化目标。