写这篇文章主要的目的就是想把看到的一些好的C语言习题摘录下来。
问题一:++i和i++哪个效率更高?
从执行效率分析
理论上,++i的执行效率比i++的执行效率要高。
因为++i 不用生成临时变量,而i++要生成临时变量。
这意味着在翻译成汇编代码时,i++可能需要更多的指令来解释。
当然这个会因编译器有所区别,有的编译器会对这个流程进行优化。
例如直接汇编相应的代码,结果如下:
可以看到它们的执行效率是差不多的。
从执行逻辑分析
i++表示先赋值后加1;i++实现的是,运算结束之后进行自加运算,换句话说这一句跑到分号之后才会有自加效果。
++i表示先加1再赋值;++i正好相反,是在这一句的一开始就进行自加,然后将结果带入运算。
问题二:i++、i+=1和i=i+1哪个效率更高?为什么?
(1)i=i+1最低,它的执行过程如下:
读取右i的地址
i+1
读取左i的地址
将右值传给左边的i(编译器并不认为左右i的地址相同)
(2)i+=1其次,它的执行过程如下:
读取左x的地址
i+1
将得到的值传给i(因为i的地址已经读出)
(3)i++效率最高,其执行过程如下:
读取左i的地址
i+1
相关习题
#include "stdio.h"
#include "string.h"
int a()
{
static int i =0;
if(i>=1)
{
return ++i;
}
return i++;
}
int main()
{
int A1 = 0;
int A2 = 0;
int A3 = 0;
A1 = a();
A2 = a();
A3 = a();
printf("%d,%d,%d\n",A1,A2,A3);
getchar();
return 0;
}