【问题标题】:Random Number: either 0 or 1随机数:0 或 1
【发布时间】:2014-03-02 00:40:57
【问题描述】:

我有这个代码:

srand(time(NULL));
int n = rand() % 1 + 0;
printf("%d\n", n);

但是,如果我将它 (notsrand(time(NULL))) 放在一个循环中,例如,它只会生成一个 0 序列。 0 到 1 之间的随机数还有另一种实现方式,或者我忘记了什么?

【问题讨论】:

  • rand() % 1 总是 0,因为 rand 返回的总是能被 1 整除
  • 顺便说一下+0总是加0,所以这里没有作用。

标签: c random


【解决方案1】:

如果您的意思是 0 1,那么您的 % 是有道理的,但您的意思是 % 2(或 & 1)。当然,+ 0 仍然毫无意义,不知道您的目标是什么。对于 0 或 1 的整数结果,只需执行以下操作:

const randomBit = rand() % 2;

编译器可能会"strength-reduce" 到:

const randomBit = rand() & 1;

另外,请确保您只在您的程序中调用srand()一次,否则它不会达到您期望的效果。

【讨论】:

  • 不不,我不想要浮点值,我只想要 0 或 1!
【解决方案2】:

如果你想要 0 或 1,就这样做

int n = rand() % 2

如果 rand 返回的是偶数,你会得到一个 0,如果它是奇数,你会得到一个 1。

【讨论】:

    【解决方案3】:
    int n = rand() % 1 + 0;  
    

    将始终生成 0,因为 rand() % 1 给出 0rand()%a 生成介于 0a-1 之间的数字)。

    【讨论】:

    • 是 srand(time(NULL));不在循环中,我指的是其他两条指令。
    【解决方案4】:
    std::srand(time(0)); //Randomise seed initialisation
    for (int rows = 0; rows < n; rows++) {
        int randNum = rand() % 2;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-21
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      • 2014-09-22
      • 2013-04-21
      • 1970-01-01
      相关资源
      最近更新 更多