好奇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");
else
printf("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与?:的耗时是一样的。
至于为什么会有这样的异常数据,我还不清楚。。。