| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1442 人关注过本帖
标题:[求助] 哪个循环的速度更快?为什么呢?
只看楼主 加入收藏
wojiaomaom
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2007-10-5
收藏
 问题点数:0 回复次数:22 
[求助] 哪个循环的速度更快?为什么呢?

for(int i=0;i <n;i++)

VS

for(int i=n;i> 0;i--)

“谁的速度更快?为什么?”

搜索更多相关主题的帖子: 速度 
2007-11-12 12:22
万兽无缰
Rank: 1
等 级:新手上路
威 望:1
帖 子:296
专家分:0
注 册:2007-8-27
收藏
得分:0 

这个有什么意义么?


女朋友问我想怎么死~~~
             我说我想"爽死"
2007-11-12 12:27
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
#include <stdio.h>
int main()
{
int i,j;
clock_t start,end;
for(j=0;j<3;j++)
{
start=clock();
for(i=0;i<=1000000000;i++);
end=clock();
printf("i++:%lf\n",(double)(end-start)/CLOCKS_PER_SEC);
start=clock();
for(i=1000000000;i>=0;i--);
end=clock();
printf("i--:%lf\n",(double)(end-start)/CLOCKS_PER_SEC);
}
return 0;
}

VC6测试结果:
i++:1.984000
i--:3.109000
i++:1.922000
i--:3.031000
i++:1.907000
i--:3.047000

说明i++比较快,原因未知

从BFS(Breadth First Study)到DFS(Depth First Study)
2007-11-12 13:13
I喜欢c
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:64
帖 子:1749
专家分:0
注 册:2007-3-2
收藏
得分:0 


不会吧!
我曾经在书上看到说i--快..
谁解释一下..
期待ing

 我是指针,却丢失了目标地址!          我是循环,却缺少了结束条件!      我是函数,却没有人来调用!   
2007-11-12 13:16
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
i-- 和 i++ 的快慢与CPU有关,这不属于C语言的问题

我一样快的。

[此贴子已经被作者于2007-11-12 13:23:23编辑过]


—>〉Sun〈<—
2007-11-12 13:20
万兽无缰
Rank: 1
等 级:新手上路
威 望:1
帖 子:296
专家分:0
注 册:2007-8-27
收藏
得分:0 
以下内容来自百度:

i++和++i孰优孰劣,是编译器实现相关的,实在不必太可以关心这个问题。 最后让我们再回到起点,对于自定义数据类型(主要是指类)说,不需要再做很多汇编代码的分析了,我很清楚的知道为什么会有人循循善诱。 因为前缀式可以返回对象的引用,而后缀式必须返回对象的值,所以导致了在大对象的时候产生了较大的复制开销,引起效率降低,因此会有劝告尽量使用前缀式,尽可能避免后缀式,除非从行为上真的需要后缀式。 这也就是More Effective C++/Term 7中的原文提到的,处理使用者自定义类型(注意不是指内建类型)的时候,应该尽可能的使用前缀式地增/递减,因为他天生体质较佳。 同时,为了保证前缀和后缀对递增/递减的语义的实现保持一致,设计上的一般原则是后缀式的实现以前缀式为基础,这样,后缀式往往多了一次函数调用,这也许也是一个需要考虑的效率因素,不过相比之下,就有点微乎其微了

女朋友问我想怎么死~~~
             我说我想"爽死"
2007-11-12 13:20
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 

我做过如下测试:
int main(void)
{
int i;
i=0x1111;
i++;
i=0x1111;
i--;
}
反汇编为:
13F4:01FE BE1111 MOV SI,1111
13F4:0201 46 INC SI
13F4:0202 BE1111 MOV SI,1111
13F4:0205 4E DEC SI


wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-11-12 13:38
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
换了几个编译器试了一下
dev-c++ 4.9.9.0

i++:1.781000
i--:1.984000
i++:1.781000
i--:1.907000
i++:1.750000
i--:1.890000

BC 3.1
i++:5.219780
i--:5.164835
i++:5.274725
i--:5.439560
i++:5.274725
i--:5.714286

TC 2.0 (TC2里面提示找不到CLOCKS_PER_SEC这个宏,所以没有除,下面的数值大概除以19.2就是秒数了)
i++:93.000000
i--:94.000000
i++:93.000000
i--:93.000000
i++:94.000000
i--:93.000000

从BFS(Breadth First Study)到DFS(Depth First Study)
2007-11-12 13:42
I喜欢c
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:64
帖 子:1749
专家分:0
注 册:2007-3-2
收藏
得分:0 
以下是引用cosdos在2007-11-12 13:20:09的发言:
i-- 和 i++ 的快慢与CPU有关,这不属于C语言的问题

我一样快的。

应该是和编译器有关吧...


 我是指针,却丢失了目标地址!          我是循环,却缺少了结束条件!      我是函数,却没有人来调用!   
2007-11-12 13:42
I喜欢c
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:64
帖 子:1749
专家分:0
注 册:2007-3-2
收藏
得分:0 
以下是引用neverTheSame在2007-11-12 13:38:28的发言:

我做过如下测试:
int main(void)
{
int i;
i=0x1111;
i++;
i=0x1111;
i--;
}
反汇编为:
13F4:01FE BE1111 MOV SI,1111
13F4:0201 46 INC SI
13F4:0202 BE1111 MOV SI,1111
13F4:0205 4E DEC SI

这个不仅是 i++、i-- 的问题!
而是for循环判断结束语 的问题...


 我是指针,却丢失了目标地址!          我是循环,却缺少了结束条件!      我是函数,却没有人来调用!   
2007-11-12 13:45
快速回复:[求助] 哪个循环的速度更快?为什么呢?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024264 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved