c語言的for迴圈中執行一次需多少機器週期

時間 2021-07-23 05:22:14

1樓:萬能導師

機器迴圈,當然只是在微控制器中,不同的微控制器使用不同的編譯軟體,最終都轉換成彙編,把機器**燒錄成微控制器。

不同的編譯軟體可以用不同的方式編譯語句。以keil為例。(我= 0;我< 1;n + +我+ +);(i, n是char或unsigned char)

賦值語句(i=0)有兩個機械迴圈,

一個判斷語句(i <1) 4個機械迴圈,

一個自加語句(n++) 1機械迴圈,

另一個自我遞增語句(i++)1機械迴圈,

另一個判斷語句(i <1) 4個機械迴圈,結束。

擴充套件資料:

指令週期:

每次cpu獲取一條指令並執行它,它就完成一系列操作,通常稱為指令週期。換句話說,指令週期就是獲取一條指令並執行它所花費的時間。由於每條指令的操作功能不同,每條指令的指令週期也不同。

例如加法指令的指令週期與乘法指令的指令週期是不同的。指令週期通常以cpu週期的數量表示,也稱為機器週期。所需的機器週期數隨指令的不同而變化。對於一些簡單的單位元組指令。

在指令取出週期中,將指令取出到指令暫存器後,立即對其進行解碼並執行,不需要其他機器週期。對於更復雜的指令,例如轉換和乘法指令,需要兩個或更多的機器週期。

具有一個機器週期的指令通常稱為單週期指令,具有兩個機器週期的指令稱為雙週期指令。

2樓:小雨手機使用者

機器週期當然是在微控制器上才有的說法,不同的微控制器採用不同的編譯軟體,最終都是轉成彙編、機器碼燒錄進微控制器。

不同的編譯軟體,對 for 語句的編譯也不盡相同,以keil 為例,對 for(i=0;i<1;i++) n++;(i,n 均為 char 型或 unsigned char 型)進行編譯,得:

①一條賦值語句(i=0) 2個機械週期,

②一條判斷語句(i<1) 4個機械週期,

③一條自增語句(n++) 1個機械週期,

④又一條自增語句(i++) 1個機械週期,⑤又一條判斷語句(i<1) 4個機械週期,結束。

3樓:匿名使用者

for(i = 0; i < 100; i++);

這條語句被優化掉了,

你可以將i的宣告新增volatile以阻止編譯器對其進行優化然後在用3樓 giftbowen 的方法試之

4樓:

利用clock()函式

clock_t start=clock();

for(i=0;i<100;i++);

clock_t end=clock();

這裡clock_t 是clock()函式返回型別的別名,意味著可以講變數宣告為clock_t型別,接受clock()函式返回值

clock()函式返回程式開始執行後的系統時間end-start的值就是100次for迴圈所用的系統時間不過我試了一下,好像,就算讓for迴圈不執行空語句,100次for迴圈所用的系統時間也是0.0

系統時間的單位是ms可能跟機器週期單位是μs差很多吧

5樓:匿名使用者

clock函式,計算用到的時鐘數。

6樓:世鑲柳

執行時間可能是零!

這和編譯器有關(如優化級別),還和cpu有關(如流水線不一樣)。

C語言的for迴圈巢狀是什麼執行規則

先滿足外層迴圈,後滿足內層迴圈。執行一次外層迴圈,完成其內部所有的內層迴圈在進入下一次外層迴圈! 比如說for i 1 i 10 i 在這個簡單的迴圈巢狀中,要先執行內層迴圈,當i等於一時,j從一執行到十,然後返回執行i等於二,再執行一遍j從一到十。知道i等於十為止! 你只要熟練單個for迴圈的各個...

C語言簡單的迴圈問題,求教高手,C語言一個簡單的迴圈問題,求教高手

1 2 是整除。c語言的整除是不保留小數點後面的數,所以是0就算你賦值給float型的變數也一樣是0 所以,你無論怎麼迴圈,怎麼加,都是0。你應該 sum 1.0 2.0 這樣。整形變數 int 是不會接受小數的,一樣會把小數點後面的數都去掉。還是為0 這樣一來。就是0 0了。所以還是0 你的for...

如何編寫按鍵精靈每迴圈一次數字1執行第一次

lz說的比較模稜兩可 我不知道你得到01 02是要幹嘛的迴圈的方法有很多 打個比方 以下為指令碼 i 1 執行第一次,數字是01 for 90 迴圈90次 如果要強制成為2位數就是這樣 if i 10 then saystring 0 不知道lz要幹嘛 我猜是輸出文字delay 50 saystri...