繁体   English   中英

尝试使用随机的32位二进制数填充数组

[英]Trying to populate an array with random 32-bit binary numbers

我分配了一个程序来用Standard C编程生活游戏。只允许我使用一维数组。 我的第一个问题是尝试使用随机的32位二进制数字填充数组。 我已经尝试编写代码来做到这一点(我的老师提供的代码根本没有被注释,因此我在某种程度上不知道我在做什么)。 当我尝试显示数组的内容时,似乎每个索引的值都相同。 你们能帮我用32个随机二进制数字(长度为32位)填充数组吗?

#include <stdio.h>
#include <stdlib.h>

#define ARSZ 32 

void displayBinary(unsigned long* , int);
unsigned long init32();

unsigned long Row[ARSZ];

int main(void){

    int i, j;

    for (i=0;i<ARSZ;i++){
        Row[i] = init32();
    }//populate array

    for (j=0;j<ARSZ;j++){
        displayBinary(Row, j);
        printf("\n");
    }//display array contents
}/** End Main **/


void displayBinary(unsigned long array[], int x){

    unsigned long MASK = 0x80000000;
    do {
        printf("%c", (array[x] & MASK) ?'X':0x20);
    }while ((MASK >>=1) != 0);
}

unsigned long init32(){

    unsigned long init32;
    srand(time(NULL));  
    init32 = ((double)rand()/RAND_MAX)*0xFFFFFFFF;
    return init32;
}

您需要更改种子。 srand(time(NULL))调用将返回相同的值序列,因为种子未更改。

粗略地看一下伪随机数生成器在C中的工作方式,这很有意义。

1)重复调用srand(time(NULL)) 而不是调用srand()init32()在调用它一次main() @ WhozCraig,@ Albert Myers

2) init32 = ((double)rand()/RAND_MAX)*0xFFFFFFFF;可能太小init32 = ((double)rand()/RAND_MAX)*0xFFFFFFFF; C仅要求RAND_MAX至少为32767。这将使init32最多具有32768个不同的值。 要确定生成32位随机数,请使用:

unsigned long init32;
init32 = rand();
init32 <<= 15;
init32 ^= rand();
init32 <<= 15;
init32 ^= rand();
// if pedantic
init32 &= 0xFFFFFFFFL;

注意:
如果RAND_MAX + 1不是2的幂,则在32位数字生成中会出现小的偏差。
另外, rand()本身有时也不是均匀随机的-取决于平台。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM