time.h有疑问请解释

时间:2014-03-16 20:36:31

标签: time.h

有人可以清楚我对此代码的疑虑:

1)这个时钟()是什么?它是如何工作的?

2)我在;语句之后从未见过for我何时需要在for之后使用这些分号   并且它会循环通过唯一的下一行代码 int tick = clock();

3)他是否通过这样做来转换为漂浮:(浮动)勾选?我可以做这件事   我首先将每个变量初始化为 short,integer,long,long long ,然后通过执行float(variable_name)将其更改为float?

提前致谢

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

int main()
{
int i;
for(i=0; i<10000000; i++);
int tick= clock();
printf("%f", (float)tick/ CLOCKS_PER_SEC);

return 0;
}

1 个答案:

答案 0 :(得分:1)

  

1)这个时钟()是什么?它是如何工作的?

它读取程序的“CPU”时钟(程序到目前为止花了多少时间)。它被称为实时时钟的RTC。精度非常高,应该接近一个CPU周期。

  

2)我从未见过;在for语句之后我何时需要在for之后使用这些分号并且它将循环通过唯一的下一行代码int tick = clock();?

没有。 ';'意思是“自己循环”。这是错误的,因为如果没有做任何事情,这样的循环可以被优化掉。因此循环所需的循环次数可能会降至零。

所以“他”[希望他]从0到1000万。

  

3)他是通过这样做来将tick转换为float :( float)tick?我可以用每个变量做这个事情,我首先初始化为short,integer,long,long long,然后通过执行float(variable_name)将其更改为float?

是。但有三个问题:

a)他使用int作为错误的刻度,他应该使用clock_t

b)clock_t可能大于32位,浮点数甚至不能容纳32位整数。

c)printf()反正需要加倍,所以转换为float也不太好,因为它会在之后将浮动转换为double。

所以这会更好:

clock_t tick = clock();
printf("%f", (double)tick / CLOCKS_PER_SEC);

现在,如果您想知道程序运行的总时间,这很好。如果你想知道某段代码需要多长时间,你想在代码之前和之后读取clock(),那么差异就会给你代码运行的时间。