我知道要生成随机长数,我在Java中执行以下步骤:
Random r = new Random();
return r.nextLong();
Run Code Online (Sandbox Code Playgroud)
在C++中,这段代码相当于什么?像这样?
return (long)rand();
Run Code Online (Sandbox Code Playgroud)
Ton*_*roy 13
<cstdlib>提供int rand().您可能需要查看手册页.如果long大于系统上的int,则可以调用rand()两次并将第一个值放在高位字中.
#include <cstdlib>
long lrand()
{
if (sizeof(int) < sizeof(long))
return (static_cast<long>(rand()) << (sizeof(int) * 8)) |
rand();
return rand();
}
Run Code Online (Sandbox Code Playgroud)
(long不可能与int的大小相同或者是int的两倍,所以如果理论上不完美则这是实用的)
检查你的文档rand()虽然.它不是一个伟大的发电机,但对大多数事情都足够好.您将要调用srand()来初始化随机数生成系统.其他人评论说Windows不会返回sizeof(int)随机位,所以你可能需要调整上面的内容.
首先,你知道在当前的标准C++中没有随机库.实际上有一个,但它在名为TR1的sperate命名空间中可用,因为它是2003年完成的技术报告的结果.它将在下一个标准的标准库中提供(如果一切顺利,将在明年出现).
因此,如果你有一个最近的编译器(VS2008或持续版本的GCC),你可以访问std :: tr1 :: random库; 如果你有一个编译器实现下一个标准的部分,那么你有std :: random.
如果您无权访问该库,则可以在boost库中找到一个实现:http://www.boost.org/doc/libs/1_44_0/doc/html/boost_random.html
现在在所有情况下,获取随机数的方式与所有相同的库(来自boost doc)相同:
boost::mt19937 rng; // produces randomness out of thin air
// see pseudo-random number generators
boost::uniform_int<> six(1,6); // distribution that maps to 1..6
// see random number distributions
boost::variate_generator<boost::mt19937&, boost::uniform_int<> >
die(rng, six); // glues randomness with mapping
int x = die(); // simulate rolling a die
Run Code Online (Sandbox Code Playgroud)
便携式黑客:
长r=0;
for (int i = 0; i < sizeof(long)/sizeof(int); i++)
{
r = r << (sizeof(int) * CHAR_BITS);
r |= 兰特();
}
返回 r;
无论如何,为什么你需要一个随机长呢?