緣由:
測試了基礎的判斷分之后,對於取余的操作又產生了興趣,那么取余和通過減法計算余數到底誰更快一些呢
直接上代碼:
#include <stdio.h>
#include <sys/time.h>
int main(int argc, char **argv){
struct timeval start, end;
int a = 45,b=10,c=0,d =4;
const long long count = 100000000;
gettimeofday(&start,NULL);
for (long long i = 0; i < count; i++)
{
c = a%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("--%% --cost:%d ms.\n",( endTime-beginTime));
gettimeofday(&start,NULL);
for (long long i = 0; i < count; i++)
{
c=a-b*d;
}
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;
}
直接上測試結果:
Linux結果:

Windows結果:

結論:
在使用1億次的循環計算后,可以看出,取余操作符鎖消耗的時間是使用- 和* 操作符混合處理的兩倍,那么對於取余的操作來說,都可以使用減法與乘法的混合運算進行替代,至少不會比取余慢
在無法使用-*快速替換時可以使用%操作符,作用就是增加了些損耗
底層實現 :
對於匯編底層都是5條指令,其實指令沒有縮減,減少的是實際預期除法指令的耗時


那么問題來了
如何通過減少匯編指令條數以達到加快處理除法和取余的操作呢,-> _ ->, 且聽后續分解
另外說一句:除法很慢,需要30多個時鍾周期,移位運算需要個數時鍾周期,效率提升很大 => 能移位用移位,不能移位用減法,不能減法用除法
