为什么sull的NULL(时间(NULL))赋予time()一个随机值?

问题描述 投票:-1回答:1

在C语言中,使用srand(time(NULL));可以产生0到32767之间的随机数。我的问题是,为什么srand的NULL(时间(NULL))赋予time()一个随机值?

此外,如何生成超过32767的随机数?

使用

if (rand ()% 2 == 0) {ans = rand () + (0b1 << 15);}
else {ans = rand ();}

是否合适?

c random srand
1个回答
0
投票

关于“为什么sull的NULL(时间(NULL))赋予时间()一个随机值?”

检查man page of time(),它提到

time() returns时间,以自从1970年1月1日00:00:00 +0000(UTC)以来的秒数为单位。如果time()为非NULL,则返回值也存储在t指向的内存中。

在此用法中,我们仅需要返回值,并且不需要将该值另外存储在任何缓冲区中,因此我们将t作为参数传递。另外,返回值是非随机,它是自1970年1月1日以来的秒数。因此,每次调用都会更新该值(严格递增)。

也就是说,关于通过调用NULL返回的值的范围

rand()函数返回伪随机整数rand()rand()范围内]](即数学范围0)。

检查平台中RAND_MAX的值。

也就是说,[0, RAND_MAX]是差劲的PRNG,您可以检查RAND_MAX以获得更好的方式来获得自己的随机数。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.