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

Ami*_*nos 1 c c++

哪个运营商更快:>==

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

if(time > -1)
// or
if (time != -1)
Run Code Online (Sandbox Code Playgroud)

时间有类型"int"

Dev*_*lar 16

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

即,实现/平台定义.

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

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


Vla*_*cow 7

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

if(time > -1)
Run Code Online (Sandbox Code Playgroud)

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

if( time >= 0 )
Run Code Online (Sandbox Code Playgroud)

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

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

if ( time != -1 )
Run Code Online (Sandbox Code Playgroud)

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

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


Lun*_*din 7

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

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

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

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

  • 很好的答案!我只想补充一点,有时候我们会在像光线追踪这样的领域工作,其中性能是最重要的竞争标准之一(当然,除了正确性之外,但在光线跟踪环境中,通常没有那么多棘手的副作用可以绊倒 - 并且在更快地追求美丽图像时,"正确性"在那里被宽松地定义.即使这样,专业人士也不会问,"这个运营商比那个运营商还快吗?" 在进行分析和测量以及更粗略的优化之后,您可以放大任何类型的微优化 - 优先级是所述的关键. (2认同)