C語言效能優化 使用位運算

2021-07-24 11:21:24 字數 1108 閱讀 8594

使用位操作可以減少除法和取模的運算。在電腦程式中資料的位是可以操作的最小資料單位,理論上可以用「位運算」來完成所有的運算和操作。一般的位操作是用來控制硬體的,或者進行資料變換,但是,靈活的位操作可以有效地提高程式執行的效率。例如:

//方法g

int i,j;

i = 257 /8;

j = 456 % 32;

//方法h

int i,j;

i = 257 >>3;

j = 456 - (456 >> 4 << 4);

在字面上好像方法h比方法g麻煩了好多,但是,仔細檢視產生的彙編**就會明白,方法g呼叫了基本的取模函式和除法函式,既有函式呼叫,還有很多彙編**和暫存器參與運算;而方法h則僅僅是幾句相關的彙編,**更簡潔,效率更高。當然,由於編譯器的不同,可能效率的差距不大,但是,以目前遇到的ms c、arm c來看,效率的差距還是不小的。

使用位操作可以減少除法和取模的運算。在電腦程式中資料的位是可以操作的最小資料單位,理論上可以用「位運算」來完成所有的運算和操作。一般的位操作是用來控制硬體的,或者進行資料變換,但是,靈活的位操作可以有效地提高程式執行的效率。例如:

//方法g

int i,j;

i = 257 /8;

j = 456 % 32;

//方法h

int i,j;

i = 257 >>3;

j = 456 - (456 >> 4 << 4);

在字面上好像方法h比方法g麻煩了好多,但是,仔細檢視產生的彙編**就會明白,方法g呼叫了基本的取模函式和除法函式,既有函式呼叫,還有很多彙編**和暫存器參與運算;而方法h則僅僅是幾句相關的彙編,**更簡潔,效率更高。當然,由於編譯器的不同,可能效率的差距不大,但是,以目前遇到的ms c、arm c來看,效率的差距還是不小的。

i++;

i = i + 1;

i++和++i的區別

在內建函式型別的情況下,效率沒有區別;在自定義資料型別情況下,++i效率更高,原因如下:

後置++的語義中總是存在乙個臨時物件,這一點很重要,否則在過載乙個類的後置++運算的時候容易搞錯。

i++總要建立乙個臨時物件,在退出函式時還要銷毀它,而且返回臨時物件的值時還會呼叫並拷貝結構函式

C語言效能優化

1 資料型別 1 如果確定整數非負,應直接使用unsigned int,處理器處理無符號unsigned 整形數的效率遠遠高於有符號signed整形數 2 float可以用int替代,如果需要結果精確到小數點後n位,可以將其乘以n 10,結果盡可能晚的把它轉換為浮點型數字 3 區域性變數盡可能的不使...

c語言效能優化 使用暫存器變數

c語言效能優化 使用暫存器變數 當對乙個變數頻繁被讀寫時,需要反覆訪問記憶體,從而花費大量的訪問時間。為此,c語言提供了一種變數,即暫存器變數。這種變數存放在cpu的暫存器中,使用時,不需要訪問記憶體,而直接從暫存器中讀寫,從而提高效率。暫存器變數的說明符是register。對於迴圈次數較多的迴圈控...

Go語言效能優化 For Range 效能研究

如果我們要遍歷某個陣列,map集合,slice切片等,go語言 golang 為我們提供了比較好用的for range方式。range是乙個關鍵字,表示範圍,和for配合使用可以迭代陣列,map等集合。它的用法簡潔,而且map channel等也都是用for range的方式,所以在編碼中我們使用f...