rand()函数不能够返回负数!
在linux下man rand,可以看到函数说明:
NAME
rand, rand_r, srand - pseudo-random number generator
SYNOPSIS
#include
int rand(void);
DESCRIPTION
The rand() function returns a pseudo-random integer between 0 and RAND_MAX.
rand()函数返回一个0-RAND_MAX之间的伪随机整数
RAND_MAX是个宏,在不同的系统下有差别,定义在stdlib.h中
#define RAND_MAX 2147483647
如果想得到任意的有符号的随机数(正数,负数,0),可以取两个随机数,一个数用来表示符号(奇数为负,偶数为正),一个数用来表示数值,如:
#include
#include
#include
using namespace std;
int main()
{
srand(time(NULL));
for( int i=0;i<10;i++ )
{
if ( rand()%2 == 0 ) //判断符号,
cout << rand() <else
cout << -rand() <}
return 0;
}
返回值加个负号就成了负数,-rand()
返回-100~+100之间的随机数,rand()%200-100;
任意负数正数或零,rand()-rand();//(这看起来可行,但是一般是得不到零的。)
一般写成rand()%x-rand()%x;//(%x,限定随机数在一定范围。)
rand返回的数值是正整数值,是零到int的最大值,如果想要包含正负号则需要在自己添加实现。
int rand(int Max)
{
int Result;
randomize();
int state = rand(1);
Result = rand(Max);
if (!Result)
{
return Result;
}
else
{
if (state)
{
return Result - Result*2;
}
return Result;
}
}
标准rand 返回的不会是负的,他的范围0~ 2^31
pow( -1, rand() ) * rand();