c语言 - 为什么 srand 的 NULL (time (NULL)) 给时间 () 一个随机值?



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

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

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

合适吗?

关于"为什么 srand 的 NULL (时间 (NULL)) 给时间 () 一个随机值?

检查time()的手册页,它提到

time()返回自纪元 1970-01-01 00:00:00 +0000 (UTC) 以来的秒数。如果t为非 NULL,则返回值也存储在t指向的内存中。

在这种用法中,我们只需要返回值,并且不需要将该值额外存储在任何缓冲区中,因此我们将NULL作为参数传递。此外,返回的值不是随机的,它是自纪元 1970-01-01 以来的秒数。因此,每次调用都会更新值(严格增量)。

也就是说,关于调用返回的值范围rand()

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

检查平台中RAND_MAX的值。

也就是说,rand()是一个糟糕的 PRNG,您可以查看此线程以获取更好的方法来获得自己的随机数。

最新更新