我有这段代码:
srand(time(NULL));
int n = rand() % 1 + 0;
printf("%d\n", n);
但是,如果我把它(不是srand(time(NULL))
)放在例如循环中,它只生成一个0的序列。
对于0到1之间的随机数还有另一种实现,或者我忘记了什么?
答案 0 :(得分:21)
如果您的意思是0 或 1,那么您的%
会有所帮助,但您的意思是% 2
(或& 1
)。当然,+ 0
仍然是毫无意义的,不知道你的目标是什么。对于0或1的整数结果,只需执行:
const randomBit = rand() % 2;
编译器可能会"strength-reduce"指向:
const randomBit = rand() & 1;
此外,请确保您只在程序中拨打srand()
一次,否则它将无法达到您期望的效果。
答案 1 :(得分:10)
如果您想要0或1,只需执行
int n = rand() % 2
如果rand返回甚至你会得到一个0,如果它很奇怪你会得到一个1。
答案 2 :(得分:1)
int n = rand() % 1 + 0;
将始终生成0
,rand() % 1
会0
rand()%a
生成0
到a-1
之间的数字。
答案 3 :(得分:-1)
std::srand(time(0)); //Randomise seed initialisation
for (int rows = 0; rows < n; rows++) {
int randNum = rand() % 2;
}