[C语言]if/else 与 ?:的时间比较

来源:互联网 发布:2016安全软件排名 编辑:程序博客网 时间:2024/05/16 19:12

好奇if/else 与 ?:是否有时间差异,于是就自己试验了一下。

#include <stdio.h>#include <sys/timeb.h>int main(void) {struct timeb s1, e1,s2,e2;int t1,t2;int year = 2000;int Tlist[2][20];    for (int n = 0; n < 21; n++) {ftime(&s1);for (int i = 0; i < 100000; i++) {if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))printf("leap");elseprintf("not leap");}ftime(&e1);t1 = (e1.time - s1.time) * 1000 + (e1.millitm - s1.millitm);Tlist[0][n] = t1;ftime(&s2);for (int j = 0; j < 100000; j++) {(((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) ? printf("leap") : printf("not leap");}ftime(&e2);t2 = (e2.time - s2.time) * 1000 + (e2.millitm - s2.millitm);Tlist[1][n] = t2;}for (int m = 0; m < 21; m++) {printf("\n%d      %d\n", Tlist[0][m], Tlist[1][m]);}return 0;}


运行结果:

#      if/else      ?  :

5648      2220
4138      2077
2195      2111
2116      2195
2200      2098
2161      2179
2165      2185
2292      2197
2213      2244
2173      2121
2134      2092
2111      2117
2183      2145
2128      2133
2138      2124
2104      2132
2169      2146
2144      2249
2275      2272
2274      2196
2220      2208

前面几次,不知道为什么,if/else 耗时明显比?:高,之后开始下降,变得和?:差不多。

于是调换了if/else 与 ?:模块的位置,再次运行:

#      if/else      ? :

6667      2045
2140      8382
2056      2130
2129      2091
2066      2121
2233      2121
2112      2091
2107      2175
2133      2208
2146      2158
2529      2139
2080      2059
2068      2053
2266      2065
2062      3022
2097      2065
2026      2894
2069      2000
2092      2127
2071      2069
2045      2033

这次不仅if/else,?:第二次的耗时也莫名的明显高于平均值。


忽略这些异常数据,可以认为if/else与?:的耗时是一样的。

至于为什么会有这样的异常数据,我还不清楚。。。

原创粉丝点击