[英]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.