C语言随机数的产生

调试环境:win10+vs2015

在编程中我们经常需要使用随机数用来进行测试,因此就需要使用到rand()函数,这里就来详解一下C语言随机数生成器。

rand()函数的原型是:int rand ( void );
该函数不需要传参,返回一个伪随机整数范围在0到RAND_MAX

在vs2015中,RAND_MAX的定义为:
#define RAND_MAX 0x7fff
也就是十进制的32767

在rand()函数中内部是去找srand()函数,经过一个算法生成随机数。
那么我们就需要了解一下srand()函数了

srand():初始化随机数发生器
srand()的函数原型:void srand(unsigned int _Seed);
该函数需要传入一个无符号的整形参数,没有返回值

总体上的意思就是:
给srand()函数传一个参数,作为rand()函数的种子,rand()函数用这个种子经过一个算法生成一个0到RAND_MAX的随机数,但是这样问题就来了,该算法是定死了的,也就是说给srand()函数传的参数如果相同的话就会产生相同的随机数,这样的随机数称之为伪随机数。如果要每次得到的随机数都不一样就需要换一个种子,所以我们就需要使用time()函数,将现在的时间毫秒值作为种子,因为毫秒单位时间变化比较快,所以这样可以将数做的更随机。

time():时间函数
time()函数原型:time_t time ( time_t * timer );
传入一个time_t指针类型的参数,返回一个time_t类型的值

在vs2015里面time_t的定义为

typedef long __time32_t;
typedef __time32_t time_t;

也即time_t是一个long类型的。

经测试,不管传入参数是time_t类型的指针还是NULL都会返回当前时间的毫秒值。
这样随机函数就完美实现了。

总结:首相调用time()函数获取当前时间毫秒值,再将其传入srand()函数生成种子,最后经rand()函数的算法产生一个由当前毫秒数产生的随机值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值