‘壹’ 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