随机长的数字,我们知道,来生成随机数长我们下面在Java中生成C++
Random r=new Random()
return r.nextLong();
步骤是什么将相当于该代码在C++的?喜欢这个?
return (long) rand();
随机长的数字,我们知道,来生成随机数长我们下面在Java中生成C++
Random r=new Random()
return r.nextLong();
步骤是什么将相当于该代码在C++的?喜欢这个?
return (long) rand();
便携式黑客:
long r = 0; for (int i = 0; i < sizeof(long)/sizeof(int); i++) { r = r << (sizeof(int) * CHAR_BITS); r |= rand(); } return r;
为什么你需要一个随机的长呢?
使用boost random library可以节省你不少讨厌的惊喜与(伪)随机数
首先,你必须吨知道,在目前的标准C++没有随机库。实际上有一个,但它可以在一个名为TR1的名称空间中使用,因为它是2003年完成的技术报告的结果。它将在下一个标准的标准库中提供(如果一切顺利,则将在明年推出)。因此,如果你有最近的编译器(VS2008或持续版本的GCC),你可以访问std :: tr1 :: random库;如果你有一个编译器实现下一个标准的部分,那么你有std :: random。
如果您没有访问该图书馆,还有在Boost库可实现:http://www.boost.org/doc/libs/1_44_0/doc/html/boost_random.html
现在,在所有的情况下,要获得一个随机数的方法是一样的,因为它是完全一样的库(来自升压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
<cstdlib>
提供INT兰特()。你可能想看看手册页。如果long在系统上大于int,则可以调用rand()两次,并将第一个值放在高位字中。
#include <cstdlib>
long lrand()
{
if (sizeof(int) < sizeof(long))
return (static_cast<long>(rand()) << (sizeof(int) * 8)) |
rand();
return rand();
}
(这是非常不可能的长既不是相同或双倍int的长度,所以这是实际的,如果不是理论上完美)
检查您的文档的RAND()虽然。这不是一个伟大的发电机,但对大多数事情来说足够好。你需要调用srand()来初始化随机数生成系统。其他人评论说,Windows不返回sizeof(int)随机比特,所以你可能需要调整上述内容。
我认为'static_cast
@ bluenote10:很好发现...会修复。干杯。 – 2015-08-03 15:24:32
Java long总是64位。 只要在大多数系统上只有32位的C++,我宁愿使用一个函数long long llrand()来代替。 – Kaiserludi 2016-09-29 15:40:15
这是我使用的方法。它返回范围[0,2^64-1]中的数字。
unsigned long long unsignedLongLongRand()
{
unsigned long long rand1 = abs(rand());
unsigned long long rand2 = abs(rand());
rand1 = rand1 << (sizeof(int)*8);
unsigned long long randULL = (rand1 | rand2);
return randULL;
}
这个功能就像兰特(),并使用无符号长型:
unsigned long _LongRand()
{
unsigned char MyBytes[4];
unsigned long MyNumber = 0;
unsigned char * ptr = (unsigned char *) &MyNumber;
MyBytes[0] = rand() % 256; //0-255
MyBytes[1] = rand() % 256; //256 - 65535
MyBytes[2] = rand() % 256; //65535 -
MyBytes[3] = rand() % 256; //16777216
memcpy (ptr+0, &MyBytes[0], 1);
memcpy (ptr+1, &MyBytes[1], 1);
memcpy (ptr+2, &MyBytes[2], 1);
memcpy (ptr+3, &MyBytes[3], 1);
return(MyNumber);
}
“我们知道,来生成随机数长我们下面的步骤”是吗?用哪种语言? – sbi 2010-09-08 06:53:29
@sbi:代码片段用于Java(因为任何经验丰富的Java程序员都可以告诉你),但是,是的,你正确地指出OP可能更直接地陈述这一点。 – 2010-09-08 06:59:21
看起来像Java或C# - 太晚:) – Klaim 2010-09-08 06:59:47