使用定义的数据类型生成随机数

时间:2013-07-30 11:18:48

标签: c++ random

我想生成一个非常长的整数随机数,我希望它是224位随机数。但我能找到的最长数据类型是无符号长long,即64位。首先我这样做了:

#include <iostream>
#include <string>
#include <stdint.h>
#include <stdlib.h>
#include <ctime>
#include "random.h"
int main()
{
    srand(time(0));

    unsigned long long num1 = rand();
    unsigned long long num2 = rand();

    cout<<"1st random number = " << num1 << endl;
    cout<<"2nd random number = " << num2 << endl;

    return 0;
}

我的想法是定义224位整数的新数据类型。 所以我尝试制作新的random.h文件:

class int224 
{
    unsigned int data[7];
}

然后修改了第一个代码:

#include <iostream>
#include <string>
#include <stdint.h>
#include <stdlib.h>
#include <ctime>
#include "random.h"
int main()
{
    srand(time(0));

    int224 num1 = rand();
    int224 num2 = rand();

    cout<<"1st random number = " << num1 << endl;
    cout<<"2nd random number = " << num2 << endl;

    return 0;
}

但是它返回了错误,也许我在定义新数据类型时犯了一个错误,我感谢任何帮助。谢谢。

4 个答案:

答案 0 :(得分:1)

你没有生成随机int224的函数,编译器也不知道该类。

您可以在Rand()中创建自己的int224功能并使用它。该函数将随机数放在每个数组的单元格中

答案 1 :(得分:1)

它不能那样工作。内置的rand函数返回一个int,你不能通过将结果赋值给更大的值来使它返回更大的值。您将不得不实现更复杂的逻辑,并使用一些调用rand来初始化结果中的不同后续位。

答案 2 :(得分:1)

由于你在类中定义了一个7的数组,你将不得不调用rand函数7次来初始化每个元素。

此外,如果你想要你的号码是无符号的,那么它很好,但如果你想让它们被签名,那么在访问这些号码时要小心,你将前6个作为无符号,最后一个作为签名。

答案 3 :(得分:1)

我想出了以下内容,不确定这是否适合你

#include <iostream>
#include <chrono>
#include <random>

struct int224 
{
    unsigned int data[7];

    int224 operator+(int224);
    int224 operator-(int224);

    int224 ()
    {
     unsigned seed =
         std::chrono::system_clock::now().time_since_epoch().count();

        std::minstd_rand0 mygen (seed); 

      for(auto i=0;i<7;i++)
        data[i]=mygen();    
    }

    friend std::ostream& operator<<(std::ostream&, const int224&);
};

std::ostream& operator<<(std::ostream& os, const int224& r)
{
    for(auto i=0;i<7;i++)
        os<<r.data[i];
    return os;
}

int main ()
{

  int224 r;
  std::cout<<r<<std::endl;

  int224 j;
  std::cout<<j;

  return 0;
}