在C中生成随机bool的简单方法是什么?

sad*_*jfh 5 c random

我想生成一个随机布尔值用于游戏,因此它不需要加密安全.我将stdbool.h在我的代码中使用,我也已经完成了#include <stdlib.h>.优选地,它应该非常快(因为我将生成其中许多),并且它应该能够在C89中完成(只是偏好).我对C++中的这一切并不感兴趣.

以下是我提出的一些方法:

  • 从/ dev/urandom读取,过滤掉单个数字,> 5 = true,<5 = false.
  • 继续调用rand()并过滤掉低/高值.

tim*_*rau 10

只需调用rand()并获取其返回值的LSB即可.

bool randbool = rand() & 1;
Run Code Online (Sandbox Code Playgroud)

记得srand()在开头打电话.

  • 这是一个反模式,因为rand生成的低位可能不是非常随机的.与"RAND_MAX/2"相比,它更好.(请参阅联机帮助页中的Notes部分http://man7.org/linux/man-pages/man3/rand.3.html) (8认同)
  • 这是一个非常糟糕的做法.rand()的实现依赖于线性同余生成器(LCG),这是众所周知的伪随机数生成器.它们在输出的较低位缺乏随机性.你应该至少采取最重要的一点. (3认同)
  • 一个好的优化编译器将生成最高效的代码,无论您使用哪一个。比尝试手动优化更好地编程以提高可读性和清晰度。 (2认同)