c语言中纯粹的if语句耗时吗
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言中纯粹的if语句耗时吗相关的知识,希望对你有一定的参考价值。
比如
if(a>7) a=1;这句占用几个机器周期?
下面这句呢?
if(a>7)
if(a>10)
if(a>15)
a=1;
这两种耗时各是多少个机器周期?是不是第二个多一些?如果是的话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左右。追问
这个方法挺好,编译器不优化了,本来我是想用三个变量代替这几个a,这样编译器也应该不会优化了吧,恩,谢谢这位匿名大哥哈!!
本回答被提问者采纳 参考技术B 具体我不知道,但是我知道的是,if语句还是比较需要开销的,而且if嵌套的话更加厉害,就是说,假如if(a>7)a=1; 需要的机器时间和资源是 单位1 ,
那么
if(a>7) if(a>10)a=1; 需要的机器时间和资源 >2。追问
哦,多谢啦
参考技术C 肯定耗时。除非该段程序为垃圾段,被优化。不然肯定要耗时,至于多少个机器周期,那就要具体看硬件环境了。
有就是不同的单片机有所不同追问
恩,我用都是计算机,不是单片机。。。多谢了啊
参考技术D if做一次比较和对a进行一次赋值周期是一样的,都是CPU的最短周期单位。另外你下面这段代码,编译器一般会优化称一个if的追问
if(a > 7)
a=2;
a=4;
a=5;
这个会优化成a=5吗?谢谢!
另外这个能不能不让它优化啊?我想用时间变量看看到底耗时多少
这个你是不能用时间变量的,因为精度不够
优化取决于你用的是什么编译器以及你的优化选项
你可以看汇编代码来看优化结果
精度微妙级的就够了,我让它循环,呵呵。。。汇编没有学过,唉,多谢啦
第5个回答 2012-02-01 一般编辑器会优化代码,如果真的要算,得看编译后的assembly代码了譬如说 :
mov = 1 cycle
and = 1 cycle
jmp = 1 cycle追问
哦,这个还没有看过,不是太懂,我还是需要多加学啊,谢谢啦!
多个if else if语句的用法?
if rvotp<>1 then
Response.Redirect "../inc/D_error.htm"
end if
最初的代码是函数值rvotp等于1则end if。
不等于1,则其他函数复回值都统一转向同一个报错页面D_error.htm。
我想把0,1,2,3这四个不同的rvotp复回值,指向不同的报错页面,请各位大侠帮忙看看哪里有问题。
If rvotp =0 Then
Response.Redirect "../inc/A_error.htm"
else if
if rvotp=2 then
Response.Redirect "../inc/B_error.htm"
else if
if rvotp=3 then
Response.Redirect "../inc/C_error.htm"
else if
end if
rvotp=1时end if,上面打错了
完全语法错误,无论是何种语言,else都是跟与其最近的一个没有配套的if相配
第一个else if跟=0配套,但是第二个是跟=2配套,同样第三个是跟=3的配套,按照你的写法,这里不是一个if..else..if结构,而是多个if..else..if嵌套
正确的写法应该是:
if rvotp=0 then
......
else if rvotp=2 then
.....
else if ......
.....
end if
扩展资料:
特点编辑
在同一个 if 结构中可以有多个 elseif 语句。第一个表达式值为 TRUE 的 elseif 语句(如果有的话)将会执行。在 php 中,也可以写成“else if”(两个单词),它和“elseif”(一个单词)的行为完全一样。
句法分析的含义有少许区别(如果你熟悉 C 语言的话,这是同样的行为),但是底线是两者会产生完全一样的行为。
elseif 的语句仅在之前的 if 或 elseif 的表达式值为 FALSE,而当前的 elseif 表达式值为 TRUE 时执行。
参考资料来源:百度百科-else if
参考技术A在else语句里继续嵌套if语句即可。
在同一个 if 结构中可以有多个 elseif 语句。
第一个表达式值为 TRUE 的 elseif 语句(如果有的话)将会执行。在 php 中,也可以写成“else if”(两个单词),它和“elseif”(一个单词)的行为完全一样。
句法分析的含义有少许区别(如果你熟悉 C 语言的话,这是同样的行为),但是底线是两者会产生完全一样的行为。
elseif 的语句仅在之前的 if 或 elseif 的表达式值为 FALSE,而当前的 elseif 表达式值为 TRUE 时执行。
扩展资料
if语句的语法如下所示(if和else是C#的关键字):
if(booleanExpression)
statement-1;
else
statement-2;
如果booleanExpression(布尔表达式)求值为true,就运行statement-1;否则运行statement-2。else关键字和后续的statement-2是可选的。
如果没有else子句,而且booleanExpression求值为false,那么什么也不会发生,程序继续执行if语句之后的代码。注意,布尔表达式必须放在圆括号中,否则无法编译。
参考资料来源:百度百科--else if
if(表达式一)
语句块一//符合表达式执行的代码
else if(表达式二)
语句块二//符合表达式执行的代码
else if(表达式三)
语句块三//符合表达式执行的代码
……
else
语句块n//符合表达式执行的代码
int main(void)
int a, b;
printf("input two numbers: ");
scanf("%d%d",&a,&b);
if(a>b)
printf("max=%d\\n",a);
else
printf("max=%d\\n",b);
return 0;
参考技术C 完全语法错误,无论是何种语言,else都是跟与其最近的一个没有配套的if相配
第一个else if跟=0配套,但是第二个是跟=2配套,同样第三个是跟=3的配套,按照你的写法,这里不是一个if..else..if结构,而是多个if..else..if嵌套
正确的写法应该是:
if rvotp=0 then
......
else if rvotp=2 then
.....
else if ......
.....
end if本回答被提问者采纳
以上是关于c语言中纯粹的if语句耗时吗的主要内容,如果未能解决你的问题,请参考以下文章
在C语言中,if和else if是否在不加花括号的情况下也是一个复合语句