while(n>0)和while(n!=0)的评估差异

4

while(n>0)while(n!=0)的评估是否不同?基本上两者都是在相同的条件下退出。那么有没有应该使用其中一个的情况?或者通过更改循环条件,当循环被评估的次数相同时,性能效率会有所不同吗?


2
这取决于n的起始值 - 如果它以负值(或溢出值)开头,它们的行为会有很大不同。此外,我认为可能会有微小的性能影响,其中一个汇编指令不同,但这真的是无意义的微观优化。 - CompuChip
3个回答

3

这取决于你的平台,但一般来说,它会表现得完全相同。例如,在x86架构中,无论是 > 还是 !=cmp 运算符都将被使用。 在这里 你可以了解更多。


1

一般情况下,差异将是中性的。

不管怎样,某些人可能会恶意考虑特殊方案,比如

while (n > 0)
{
  ...
  n++;
}

vs.

while (n != 0)
{
  ...
  n++;
}

编译器可以推断出在第一个片段中测试仅需要在第一次迭代中进行,并将while展开为if

非常抱歉,我真的不理解你在第一种情况下将while展开为if的意思。 - Vini
if (n > 0) { ...; n++; while (true) { ...; n++; } } - user1196549
好的,我想到了n递减的情况:)。那么如果代码以这种形式重写,性能会有所改变吗? - Vini
@Vini:无论如何,没有任何可衡量的东西。 - user1196549

1
除了条件不同之外,性能方面没有任何区别。

1
你有证据证明性能没有差异吗? - Binkan Salaryman
3
基于典型CPU对于条件跳转的机器指令在运行时间上没有区别,这是@BinkanSalaryman所说的。但欢迎你证明我错了。 - Henry
@Henry:如果两种测试的分支预测逻辑不同,它们的行为可能会有所不同。(尽管我并不真的相信它们会有所不同。) - user1196549

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接