unsigned int a; while(a--!= 0)和while(a--> 0)," while"会更快吗?

时间:2015-10-30 20:13:07

标签: c linux arm

我想知道,unsigned int a;,如果while(a-- != 0)while(a-- > 0)将执行与否相同的时间和数量的指令。

哪一个更好用?

2 个答案:

答案 0 :(得分:2)

“更快”或“更慢”的概念不适用于C代码。 C语言结构没有任何与它们相关的特定“速度”。只能对生成的机器代码进行速度分析。

如果a是无符号类型,则任何自尊的编译器都应为两个版本生成相同的代码。 “大于零”和“不等于零”是无符号值的等效比较。

即使某些编译器决定按字面翻译它,对于许多现代平台而言,差别只是一个特定的条件跳转指令。无论如何,表现都是一样的。

答案 1 :(得分:1)

它们都花费相同的时间,而unsigned int a可能会生成相同的代码。

关于第二个问题,我赞成第二个问题:

while(a-- > 0)

有两个原因:

  • 它更具可读性:它使读者明白a将从初始值下降到0包含在内。
  • 它更加一致,因为它对signedunsigned值具有相同的行为。您可以将此惯用法用于所有向下迭代,如果asigned并且初始值为负,则会正确跳过循环。