请问我如何得到一个32位无符号的随机数,见内,100分在线等

时间:2022-12-16 03:31:51
请问我如何得到一个32位无符号(相差比较大)的随机数,
srand
和rand 怎么用(是不是配合用啊),种子上怎么回事啊,同样的种子下去随机数都一样了。。

我种子数怎么填啊,  谢谢:

11 个解决方案

#1


#include<stdio.h>
int main(void)
{
    unsigned j,k; 
    srand(j);
    k=rand();
    printf("%d %u",sizeof(k),k);
    getch();
    return 0;
}

#2


srand( (unsigned)time( NULL ) );

unsigned int result = rand();

得到result 后再判断大小了,太小就乘上一个数.


#3


srand(time(NULL));

#4


太小就乘上一个数.???
这样都行?!

#5


#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<iostream.h> 
#include<string.h> 

int main()
{
    srand(time(0));
    int k;
    char str[32] ;
    char kk;  
    for(int i=0;i<32;i++)
    {
        k=rand()%10;
        str[i]=k+48; 
        cout<<str[i]; 
    }
    system("pause");
    return 0;
}

#6


多谢各位;
用时间我考虑过了,由于我在设备启动过程中用到,设备中没有象pc 断电还计时间的bios
所以如果用time 每次启动取到的都是一个数值(或很接近,几次就会重复)

#7


在设备启动过程中用到?那就不懂了

#8


一般都只有用时间来初始化呀。
其他东西都不好保证每次种的种子不一样..

#9


读入某些端口的数据来初始化呢?看你程序启动的时候,那些端口是未定义的,然后就使用那些端口的数据,同时结合时间。使用+,^等等,都可以。

或者使用文件,记录上次的种子,然后这次将种子加1,保存(或者加更多),产生的随机序列有发散效应,变化也很大。(或者用程序退出前最后一个随即数进行处理也可以)。

需要32位的话,任意取2个数据之后相成,则可以了,(因为rand是返回16位的数据,所以相乘大致可以模拟32位,不过建议还是采用2次取rand,然后使用<<来做: u_int data = rand()<<16+rand();这样子比相乘要随机,不会出现乘法的聚集效应,而且速度更快。

#10


太小就乘上一个数.???
这样都行?!


===================》
没问题的,本来生成的就是一个随机数。你对它进行操作后,它还是一个随机的。

#11


可以用汇编指令rdtsc(只对x86 cpu有效)来产生一个随机数种子

#1


#include<stdio.h>
int main(void)
{
    unsigned j,k; 
    srand(j);
    k=rand();
    printf("%d %u",sizeof(k),k);
    getch();
    return 0;
}

#2


srand( (unsigned)time( NULL ) );

unsigned int result = rand();

得到result 后再判断大小了,太小就乘上一个数.


#3


srand(time(NULL));

#4


太小就乘上一个数.???
这样都行?!

#5


#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<iostream.h> 
#include<string.h> 

int main()
{
    srand(time(0));
    int k;
    char str[32] ;
    char kk;  
    for(int i=0;i<32;i++)
    {
        k=rand()%10;
        str[i]=k+48; 
        cout<<str[i]; 
    }
    system("pause");
    return 0;
}

#6


多谢各位;
用时间我考虑过了,由于我在设备启动过程中用到,设备中没有象pc 断电还计时间的bios
所以如果用time 每次启动取到的都是一个数值(或很接近,几次就会重复)

#7


在设备启动过程中用到?那就不懂了

#8


一般都只有用时间来初始化呀。
其他东西都不好保证每次种的种子不一样..

#9


读入某些端口的数据来初始化呢?看你程序启动的时候,那些端口是未定义的,然后就使用那些端口的数据,同时结合时间。使用+,^等等,都可以。

或者使用文件,记录上次的种子,然后这次将种子加1,保存(或者加更多),产生的随机序列有发散效应,变化也很大。(或者用程序退出前最后一个随即数进行处理也可以)。

需要32位的话,任意取2个数据之后相成,则可以了,(因为rand是返回16位的数据,所以相乘大致可以模拟32位,不过建议还是采用2次取rand,然后使用<<来做: u_int data = rand()<<16+rand();这样子比相乘要随机,不会出现乘法的聚集效应,而且速度更快。

#10


太小就乘上一个数.???
这样都行?!


===================》
没问题的,本来生成的就是一个随机数。你对它进行操作后,它还是一个随机的。

#11


可以用汇编指令rdtsc(只对x86 cpu有效)来产生一个随机数种子