緣由:
在追求急速的處理過程中判斷是必不可少的分支條件,那么存在三目運算符 A ?A:0這種取值 和if else 分支取值應該用哪個更好呢,那就取決於到底這兩個語句之間有什么差異
話不多說先上測試代碼:代碼很簡單
linux:
#include <stdio.h>
#include <sys/time.h>
int main(int argc, char **argv){
struct timeval start, end;
int a = 1,b=2,c=0;
const long long count = 10000000000;
gettimeofday(&start,NULL);
for (long long i = 0; i < count; i++)
{
if (a>b)
c=a;
else
c=b;
}
gettimeofday(&end,NULL);
long long beginTime = (long long)start.tv_sec * 1000 + (long long)start.tv_usec / 1000;
long long endTime = (long long)end.tv_sec * 1000 + (long long)end.tv_usec / 1000;
printf("--if--cost:%d ms.\n",( endTime-beginTime));
gettimeofday(&start,NULL);
for (long long i = 0; i < count; i++)
{
c=a>b?a:b;
}
gettimeofday(&end,NULL);
beginTime = (long long)start.tv_sec * 1000 + (long long)start.tv_usec / 1000;
endTime = (long long)end.tv_sec * 1000 + (long long)end.tv_usec / 1000;
printf("--?:--cost:%d ms.\n",endTime-beginTime);
return 0;
}
在使用100億次循環測試結果如下:

Centos下測試效率基本相當,前后幾次測試結果,兩者效率近乎等價,畢竟100億次的測試結果已經夠說明問題了
windows:
win下的同樣執行100億次的循環比較測試,多次測試后,結果如下:

當windows的執行次數下降到1000W次時,結果如下

三目運算符還稍微快一點
結論:
在linux下if else 和三目運算符效率相當,
在windows下if else的效率在100億次的循環中強於三目運算符,但是在小於1億次以下的循環是三目運算符快一點
底層實現:


三目運算符需要10條匯編指令,if else 需要8條匯編指令,但是對於不同的系統編譯出來的也有差異。
