C 那些事 餘數是 操作和用減法計算餘數哪個快

2022-09-09 12:48:18 字數 1396 閱讀 1630

測試了基礎的判斷分之後,對於取餘的操作又產生了興趣,那麼取餘和通過減法計算餘數到底誰更快一些呢

直接上**:

#include #include int main(int argc, char **ar**)

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++)

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多個時鐘週期,移位運算需要個數時鐘週期,效率提公升很大 => 能移位用移位,不能移位用減法,不能減法用除法

C語言那些事之指標操作

乙個函式如果要返回乙個陣列,這個陣列最好不要定義成區域性變數,因為區域性變數傳過去後,該位址的內容有可能會發生變化,所以只能定義全域性變數陣列作為返回引數。定義的指標變數,該變數只能被呼叫或傳入位址,不能進行內容操作,否則會奔潰,在stm32中會跑入錯誤中斷中。貼乙個最近寫的字串操作的函式 c檔案 ...

C 的那些事

面試總結一 1.sizeof的題 沒找到原題,找到乙個類似的如下 char str new char 100 sizeof str 答 在c c 裡陣列作為引數時傳遞的實際上是指向陣列第乙個元素的指標,因此sizeof str 返回的是指標的大小,即4。推薦於2016 11 04 03 14 03最...

C 編譯那些事

最近想從pcl庫中繼承類進行改寫,然後遇到了很多問題,這裡記錄一下,自己是菜鳥,編譯什麼的都不太懂。我們一般都是.cpp和.h的形式,pcl是在.h中定義,然後在.hpp中實現,cpp的作用我現在也沒搞明白,還有涉及預編譯什麼的,蒙 從庫的.h和.hpp分別複製了檔案出來,命名成自己的,繼承類也改了...