您的位置首页生活百科

C语言里面有一行真看不懂了,求教各位srand((unsigned)time(NULL))拜托明白些

先从rand()函数将起吧,可能比较好理解

函数rand()是真正的随机数生成器,而srand()会设置供rand()使用的随机数种子。srand()括号里面的值,我们称之为种子。系统会根据种子的值放入一套系统算法内 来 生成一组随机数,如果种子的值相同。

比如srand(1),系统将1放入系统算法内,产生一组固定的随机数。那么使用rand()时,rand()取到的值从这组固定姿乱的随机数中的第一个开始往后去,调用rand()几次,就取前n个。如下图:

C语言里面有一行真看不懂了,求教各位srand((unsigned)time(NULL))拜托明白些

而如果用户在rand()前没有调用过srand(),那么系统默认将1作为伪随机数的初始值,每个系统的算法可能不一样,你电脑上的可能不是这一组,但当种子固定的时候(如上面为1的情况),rand()调用的数据都是该组固定的,随机数。

 

当我们将其该种子改为2 或 3 时候,每次使用的时候都对应于种子的固定的随机数,

因此,人们将固定的种子产生的随机数,为伪随机数。如下

 

 

 

每次运行的时候,都是种子2对应的固定随机数组(系统算法根据种子2算出来的)

 

 

 

每次运行的时候,都是种子3对应的固定随机数组(系统算法根据种子3算出来的)

 

 

那现在就该想,那怎样产生一个真正的随机数呢,

我们考虑怎样让种子随时间变化,那么每次运行枣厅的时候,(系统算法根据时间种子算出来的随机数组就不同)。种子time(0)返回的是系统的时间(从1970.1.1午夜算起到你电脑系统上的时间为止的总的秒数),故每秒产生的随机数组都不同。这才是真正的随机数。如下:

 (unsigned)time(NULL)  前面的(unsigned)表示为无符号整型 ,NULL数迹岩档值上等价于0

用time(NULL)  和time(0)是一样的

 

 

 

建议自己上机验证

本来想多上传几张照片,但上传出错,有兴趣自己验证,呵呵