for循环递减到0更快吗?

时间:2019-05-09 17:35:38

标签: c++ loops optimization

根据此blog,此代码

for( i =0; i<10; i++)

比此代码慢

for(i=10; i--; )

因为

  

测试某物是否等于零比比较两个不同的数字要快。

这是真的吗?为什么?

2 个答案:

答案 0 :(得分:0)

该博客是正确的,但是,从我的经验来看,这比更改一些小调整更为复杂。

重要元素不是循环的顺序。从-10变为0时,您会得到相同的效果。这里的相关元素是与0的比较。CPU有专用于与0进行比较的指令,而与任何其他数字的比较则需要使用通用比较。

因此对于循环,是的,它将更快。但是,如前所述,还有很多其他方面。编译器优化行循环展开可能会删除完整循环。几乎任何操作都比循环本身更昂贵,并且算法更改可以节省大量时间。

有关与零进行比较的更多详细信息,您可以从以下线程开始:Is comparing to zero faster than comparing to any other number?

答案 1 :(得分:-4)

它知道此循环的最后位置为0,因此无法检查条件。 所以它的直接i-1然后打印

int main()
   {
      int i;
       for( i =10; i--;)
       {
       cout<<i;
       }

     return 0;
   }