getrandmax()为什么32767限制在Windows上?

P K*_*P K 7 php random

PHP在Windows上返回最大可能的随机值32767?

什么是Windows上的约束?

echo getrandmax(); //32767
Run Code Online (Sandbox Code Playgroud)

Pas*_*TIN 10

根据PHP源代码,getrandmax()定义为:

PHP_FUNCTION(getrandmax)
{
    if (zend_parse_parameters_none() == FAILURE) {
        return;
    }

    RETURN_LONG(PHP_RAND_MAX);
}
Run Code Online (Sandbox Code Playgroud)

PHP_RAND_MAX定义为:

#define PHP_RAND_MAX RAND_MAX
Run Code Online (Sandbox Code Playgroud)

RAND_MAX 本身被定义为:

/* System Rand functions */
#ifndef RAND_MAX
#define RAND_MAX (1<<15)
#endif
Run Code Online (Sandbox Code Playgroud)

所以,如果有一个RAND_MAX定义,它被使用...


...而且,在使用Visual Studio的Windows上,确实有一个RAND_MAX定义的(引用):

常量RAND_MAXrand函数可以返回的最大值.RAND_MAX被定义为值0x7fff.

因此,基本上,getrandmax()返回32767是因为它是在Windows上定义的 - 而PHP通常使用底层系统导出的内容.