首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建随机bit64值

如何创建随机bit64值
EN

Stack Overflow用户
提问于 2013-05-06 20:27:03
回答 2查看 1.4K关注 0票数 4

我在试图生成一个随机的无符号__int64值时遇到了困难,有没有人有一种快速有效的方法来做这样的事情呢?下面是我正在做的,检查下面的代码。

代码语言:javascript
复制
unsigned __int64 m_RandomKey = 0;

while(m_RandomKey == 0)
{
    m_RandomKey = (unsigned __int64) rand() << 32 | rand();
}

生成一个未签名的__int64密钥的最佳方法是什么,这样很难在一段时间后再获得相同的密钥,甚至根本不需要?--只要它在18,446,744,073,709,551,615中仍然有1的可能不再出现,它就不一定是唯一的

EN

回答 2

Stack Overflow用户

发布于 2013-05-06 20:32:03

如果使用的是C++11,则可以使用std::mt19937_64,这是Mersenne算法的原生64位实现。

http://en.cppreference.com/w/cpp/numeric/random

它可以在VisualC++ 2010和2012年(http://msdn.microsoft.com/en-us/library/ee462314(v=vs.100).aspx )中获得。

票数 7
EN

Stack Overflow用户

发布于 2013-05-06 20:39:48

我认为你的方法是快速,便携和足够好。只要你初始化随机种子好,这应该是非常好的工作。Rand()可能不是一个完美的均匀分布,但它非常接近。

正如@Pete在下面提到的那样,Rand()只会在16位数字上工作,所以对于真正的可移植性来说,一个稍微复杂一些的表达式可能更好: m_RandomKey = (rand() << 48) ( (rand() << 48)x (rand() << 32)\(rand()<<16)\rand();

还是快而且肯定更好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16406709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档