『壹』 c語言delay延時時間怎麼算,說的詳細點謝謝
DelayMS(300)表示希望系統delay 300毫秒,系統有自己的RTC,根據硬體的晶振(Hz)可以計算出一次振盪大約多少耗時,這樣就能大約算出1ms需要多少次振盪;
簡單比喻一次振盪需要1us,那1ms就是1000次振盪,300ms就是300x1000次振盪,這樣就能大概的計算出300ms delay;
這得看你的CPU運行一條指令得多久,像單片機89C51一般一條1us。
『貳』 C語言里乘法比加法慢多少,浮點數運算比整數運算慢多少
這個和C語言關系不大
因為是CPU執行的
所以實際上 要看硬體指令集。
一般來說 int型加法需要做一次操作即可。
而乘法大約是加法的5倍左右,具體看內核指令實現
最快可能到2倍 最慢可能到40倍。
浮點數運算,主要看是否有專門的硬浮點計算單元。 如果有,那麼和加法差不多,稍慢一些
如果沒有 那就慢很多了。
『叄』 C語言的計算耗時問題
#include "stdio.h"
#include <time.h>
void hannota(int n,char ta1,char ta2,char ta3);
void main()
{
int n;
clock_t begin, ration;
printf("input the number of diskes:");
scanf("%d",&n);
begin = clock();
hannota(n,'1','2','3');
ration = clock() - begin;
printf( "用時約: %d毫秒", ration*1000 / CLOCKS_PER_SEC );
printf("\n");
}
void hannota(int n,char ta1,char ta2,char ta3)
{
if(n==1)
printf("%c--->%c",ta1 ,ta2);
else
{
hannota(n-1,ta1,ta3,ta2);
printf("%c---->%c",ta1,ta2);
hannota(n-1,ta3,ta2,ta1);
}
}
『肆』 c語言中運算符運算速度的排名,優先順序別已經知道如圖所示,想知道他們的運算速度的排名,了解的告訴下謝謝
基本上也是按照操作符個數來的
1取址 ,賦值
2位運算
3邏輯非
4加減
5邏輯與或
6 乘除
三目運算符
『伍』 C語言的for循環中執行一次需多少機器周期
機器循環,當然只是在單片機中,不同的單片機使用不同的編譯軟體,最終都轉換成匯編,把機器代碼燒錄成單片機。
不同的編譯軟體可以用不同的方式編譯語句。以keil為例。(我= 0;我< 1;N + +我+ +);(I, n是char或unsigned char)
賦值語句(I=0)有兩個機械循環,
一個判斷語句(I <1) 4個機械循環,
一個自加語句(n++) 1機械循環,
另一個自我遞增語句(i++)1機械循環,
另一個判斷語句(I <1) 4個機械循環,結束。
(5)c語言各運算耗時擴展閱讀:
指令周期:
每次CPU獲取一條指令並執行它,它就完成一系列操作,通常稱為指令周期。換句話說,指令周期就是獲取一條指令並執行它所花費的時間。由於每條指令的操作功能不同,每條指令的指令周期也不同。
例如加法指令的指令周期與乘法指令的指令周期是不同的。指令周期通常以CPU周期的數量表示,也稱為機器周期。所需的機器周期數隨指令的不同而變化。對於一些簡單的單位元組指令。
在指令取出周期中,將指令取出到指令寄存器後,立即對其進行解碼並執行,不需要其他機器周期。對於更復雜的指令,例如轉換和乘法指令,需要兩個或更多的機器周期。
具有一個機器周期的指令通常稱為單周期指令,具有兩個機器周期的指令稱為雙周期指令。
『陸』 C語言求指點,程序執行判斷語句與賦值語句時,哪個耗時更長 比如:if(a>b) a=b; 是if
你好,判斷語句耗時長,因為a=b就只有一次指令,前者有多次。
『柒』 c語言中純粹的if語句耗時嗎
要算機器周期的話,還取決於實際的軟硬體環境的,
給你一個程序實驗一下:
#include <stdio.h>
__forceinline unsigned _int64 My_clock(void)
{
_asm _emit 0x0F
_asm _emit 0x31
}
unsigned _int64 Start(void) { return My_clock();} // 開始時間
unsigned _int64 Stop(unsigned _int64 m_start, unsigned _int64 m_overhead)
{return My_clock()-m_start - m_overhead; } // 停時間
void main()
{
unsigned _int64 m_start=0, m_overhead=0;
unsigned int N;
int a;
m_start = My_clock();
m_overhead = My_clock() - m_start - m_overhead;
m_start = My_clock(); // 正式開始
//測試程序段 Start
//這里寫你要計算耗時的程序段!!!!!!!!!!!!!!!!!!!!!!!!
//測試程序段 End
N = Stop(m_start,m_overhead); // 獲取耗時.
printf("Time:%I64d us\n", N);
}
我VC6+win7環境測試了一下:
#include <stdio.h>
__forceinline unsigned _int64 My_clock(void)
{
_asm _emit 0x0F
_asm _emit 0x31
}
unsigned _int64 Start(void) { return My_clock();} // 開始時間
unsigned _int64 Stop(unsigned _int64 m_start, unsigned _int64 m_overhead)
{return My_clock()-m_start - m_overhead; } // 停時間
void main()
{
unsigned _int64 m_start=0, m_overhead=0;
unsigned int N;
int a;
m_start = My_clock();
m_overhead = My_clock() - m_start - m_overhead;
m_start = My_clock(); // 正式開始
//測試程序段 Start
if(a>7) a=1;
//測試程序段 End
N = Stop(m_start,m_overhead); // 獲取耗時.
printf("Time:%I64d us\n", N);
}
耗時10us左右
下面這句呢?
if(a>7)
{
if(a>10)
{
if(a>15)
{
a=1;
}
}
}
#include <stdio.h>
__forceinline unsigned _int64 My_clock(void)
{
_asm _emit 0x0F
_asm _emit 0x31
}
unsigned _int64 Start(void) { return My_clock();} // 開始時間
unsigned _int64 Stop(unsigned _int64 m_start, unsigned _int64 m_overhead)
{return My_clock()-m_start - m_overhead; } // 停時間
void main()
{
unsigned _int64 m_start=0, m_overhead=0;
unsigned int N;
int a;
m_start = My_clock();
m_overhead = My_clock() - m_start - m_overhead;
m_start = My_clock(); // 正式開始
//測試程序段 Start
if(a>7)
{
if(a>10)
{
if(a>15)
{
a=1;
}
}
}
//測試程序段 End
N = Stop(m_start,m_overhead); // 獲取耗時.
printf("Time:%I64d us\n", N);
}
耗時30us左右。
『捌』 c語言memset運行函數 耗時嗎
比較耗時
100G內存陵虧老的memset、memcpy消耗時間尺升分別為:6766ms、17687ms;CPU均空物為51%. 代碼: #include "stdafx.h" #include