为什么srand(time(NULL))的NULL给time()一个随机值?

why does NULL of srand (time (NULL)) give time () a random value?

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

另外,如何生成大于32767的随机数?

使用

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

合适吗?

关于"why does NULL of srand (time (NULL)) give time () a random value?"

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

time() returns the time as the number of seconds since the Epoch, 1970-01-01 00:00:00 +0000 (UTC). If t is non-NULL, the return value is also stored in the memory pointed to by t.

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

也就是说,关于值的范围 return 通过调用 rand()

The rand() function returns a pseudo-random integer in the range 0 to RAND_MAX inclusive (i.e., the mathematical range [0, RAND_MAX]).

检查 RAND_MAX 在您的平台中的价值。

就是说,rand() 是一个糟糕的 PRNG,您可以检查 this thread 以获得更好的随机数。