首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

有关单片机c的加法为什么会比减法运算速度慢的小疑点

2012-05-13 
有关单片机c的加法为什么会比减法运算速度慢的小问题、刚学了个非常简单的操作:AT89C52的LED灯的闪烁、然后,

有关单片机c的加法为什么会比减法运算速度慢的小问题、
刚学了个非常简单的操作:AT89C52 的LED灯的闪烁、
然后,我用了这样的一个代码:

#include<reg52.h>
sbit D1=P1^0;
void main()
{
unsigned int i;
while(1)

  for(i=0;i<50000;i++)
  D1=0;
  for(i=50000;i>0;i--)
  D1=1;
   
}
}

结果发现灯亮的时间比灭的时间要长、一开始我以为是C中自增自减的实现问题、

于是我把i++和i--换成i=i+1和i=i-1后,结果还是这样。

想不明白,一般机器的运算不是以加法为基础的么,我以为应该是加法比减法速度快才对的、、、纠结中

求高手赐个解答~~~

[解决办法]
你写成
for(i=50000;i>0;i--)
D1=1;
for(i=0;i<50000;i++)
D1=0;

看看谁时间长,谁时间短啊




[解决办法]
是 i--,i>0处理的时间比i++, i<50000需要的时间短。

前者算i = i - 1的时候同时也就判断了原来i和1的关系,也就是现在i和0的关系
后者还要另外算一个i - 50000来判断i和50000的关系
[解决办法]
这样的话,以后是不是对于for之类的循环

如果可能,都是用i--的方式比较好了~~~~

谢谢
[解决办法]

探讨
我是不是可以这样理解:i--,i>0的时候两个二进制数只要比较一位就行,而i++, i<50000的时候要比较多位二进制数?

[解决办法]
++版本多一次减法运算,并不是i-1比i-50000快。

for循环一般的确能用i--就用i--。汇编里写循环默认也是用寄存器-1,如果寄存器不等于0继续循环的逻辑。

但是最后还是具体问题具体分析,比如需要严格按顺序访问数组的时候,单弄个变量--就没意义了。

热点排行