在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()
函数返回0
到RAND_MAX
范围内的伪随机整数(即数学范围[0, RAND_MAX]
)。
检查平台中RAND_MAX
的值。
也就是说,rand()
是一个糟糕的 PRNG,您可以查看此线程以获取更好的方法来获得自己的随机数。