我想知道,unsigned int a;
,如果while(a-- != 0)
和while(a-- > 0)
将执行与否相同的时间和数量的指令。
哪一个更好用?
答案 0 :(得分:2)
“更快”或“更慢”的概念不适用于C代码。 C语言结构没有任何与它们相关的特定“速度”。只能对生成的机器代码进行速度分析。
如果a
是无符号类型,则任何自尊的编译器都应为两个版本生成相同的代码。 “大于零”和“不等于零”是无符号值的等效比较。
即使某些编译器决定按字面翻译它,对于许多现代平台而言,差别只是一个特定的条件跳转指令。无论如何,表现都是一样的。
答案 1 :(得分:1)
它们都花费相同的时间,而unsigned int a
可能会生成相同的代码。
关于第二个问题,我赞成第二个问题:
while(a-- > 0)
有两个原因:
a
将从初始值下降到0
包含在内。signed
和unsigned
值具有相同的行为。您可以将此惯用法用于所有向下迭代,如果a
为signed
并且初始值为负,则会正确跳过循环。