目录
1.1 rand函数
#include<stdlib.h>
int main()
{
int rand( void );
return 0;
}
定义:生成一个伪随机数
头文件: <stdlib.h>
注释:rand函数返回一个范围为0到RAND_MAX(0x7fff / 32767)的伪随机整数。在调用rand之前,需要使用srand函数为伪随机数生成器提供种子(这也就意味着每次调用rand函数时,都需要先调用srand函数)。
// Maximum value that can be returned by the rand function:
#define RAND_MAX 0x7fff
注:这里是define定义的宏,rand函数可以返回的最大值。十六进制 0x7fff 等于十进制 32767。
1.1.2 srand函数
#include<stdlib.h>
int main()
{
void srand( unsigned int seed );
return 0;
}
定义:设置一个随机起点
头文件: <stdlib.h>
注释:srand函数设置了生成一系列伪随机整数的起始点。种子的任何其他值将生成器设置为随机起点。Rand检索生成的伪随机数。在调用srand之前调用rand生成与调用srand相同的序列,其中seed传递为1。
注:其中seed为unsigned int类型的变量,也被称作种子,传递的值为1。也就意味着:srand(unsigned int seed) == srand(1);这样调用会导致每次产生的伪随机数相同,因为种子相同,产生的随机数也相同。为了使伪随机数更具有随机性,常常使用系统时间time函数来初始化。
1.1.3 time函数
#include<time.h>
int main()
{
time_t time(time_t * timer);
return 0;
}
定义:获取系统时间
头文件: <time.h>
注释:time函数根据系统时钟返回自协调世界时1970年1月1日午夜(00:00:00)以来经过的秒数。返回值存储在定时器给定的位置。该参数可以为NULL,在这种情况下,返回值不被存储。( time函数 == 时间戳)。
备注:
时间戳 是指格林威治 时间 1970年01月01日00时00分00秒起至当下的总秒数。
时间戳计算的是北京时间相较于计算机的起始时间之间的一个差值,将它换算成以秒为单位的一个数字,而使用time函数可以理解为:返回调用time函数的时间点与计算机起始之间的一个时间戳 。
1.2 rand函数生成随机数原理
rand函数在使用之前需要调用srand函数,srand函数生成伪随机数更建议使用time函数,time函数的参数一般置成空指针(NULL),返回类型需要强制转化成unsigned int,unsigned int 类型的time(NULL)就是srand需要的一直会变化的种子 ,然后被rand函数调用
#include<stdlib.h>
#include<time.h>
int main()
{
srand((unsigned int)time(NULL));
rand();
return 0;
}