《C语言参考手册》中关于 rand() 函数有如下描述。
(1)rand() 函数的原型
int rand(void);
(2)连续调用 rand 将返回 0 到 int 类型的最大可表示的正值(含该值)之间的整数值,它们是一个伪随机数生成器所产生的连续结果。在标准 C 中,rand 的上界是上 RAND_MAX 所指定的,这个值至少是 32 767。
问题:rand 返回的值包括 0 吗?一直以来都有这个疑问,也做了一些简单的实验,结果是不包括 0,但毕竟没有找到文字说不包括 0,所以一直不能肯定。虽然从 (2) 的描述来看,应该是不包括 0 的。所以还是决定向大家咨询一下,rand 返回的值域到底是 (0, RAND_MAX],还是 [0, RAND_MAX]。期待您的回答。
C99标准7.20.2.1
The rand function computes a sequence of pseudo-random integers in the range 0 to RAND_MAX.
7.20.2.2 还给出了一种srand和rand的实现方法,从代码来看范围是[0,RAND_MAX]
EXAMPLE The following functions define a portable implementation of rand and srand.
static unsigned long int next = 1;
int rand(void) // RAND_MAX assumed to be 32767
{
next = next * 1103515245 + 12345;
return (unsigned int)(next/65536) % 32768;
}
void srand(unsigned int seed)
{
next = seed;
}
等了几天,没有其他答复。
通过与其他人的交流,我赞同您的答复,谢谢。
正值不包括0