很早以前(DOS+win98时代),我被教育说while比for循环效率高。当时测试的结果也确实是。但测试用例忘记了。现在,如下2个函数,算法是一样的,执行效果也一样
int log2_while(int n){
int res = 0;
while((n>>=1))
res++;
return res;
}
int log2_for2(int x)
{
for(int i=0;;i++)
if((x>>=1)==0)
return i;
}
执行效果
--第1遍
use for2 199229440,234ms(慢)
use while 199229440,219ms
use for2 335544480,344ms(慢)
use while 335544480,327ms
--第2遍
use for2 199229440,234ms
use while 199229440,234ms
use for2 335544480,328ms
use while 335544480,343ms(慢)
从这里看到cl有个FA选项可以输出生成的asm
下面把这个cpp文件的asm显示如下
01. #include
02. int log2_while(int n){
03. int res = 0;
04. while((n>>=1))
05. res++;
06. return res;
07. }
08. int log2_for2(int x)
09. {
10. for(int i=0;;i++)
11. if((x>>=1)==0)
12. return i;
13. }
14. void main()
15. {
16. log2_while(6