为什么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 以获得更好的随机数。
在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). Ift
is non-NULL, the return value is also stored in the memory pointed to byt
.
在这种用法中,我们只需要 return 值,我们不需要将该值额外存储在任何缓冲区中,因此我们将 NULL
作为参数传递。此外,returned 值 不是随机的 ,它是自纪元 1970-01-01 以来的秒数。所以每次调用都会更新值(严格增量)。
也就是说,关于值的范围 return 通过调用 rand()
The
rand()
function returns a pseudo-random integer in the range0
toRAND_MAX
inclusive (i.e., the mathematical range[0, RAND_MAX]
).
检查 RAND_MAX
在您的平台中的价值。
就是说,rand()
是一个糟糕的 PRNG,您可以检查 this thread 以获得更好的随机数。