Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 尝试用随机32位二进制数填充数组_C_Arrays_Random_Binary - Fatal编程技术网

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

C 尝试用随机32位二进制数填充数组,c,arrays,random,binary,C,Arrays,Random,Binary,我的任务是用标准C语言编写《生活的游戏》。我只能使用1D数组。我的第一个问题是尝试用随机的32位二进制数字填充数组。我试着编写代码来实现这一点(我的老师提供的代码根本没有注释,所以在某种程度上我不知道我在做什么)。当我尝试显示数组的内容时,似乎每个索引的值都是相同的。你们能帮我用32个随机二进制数字(32位长度)填充我的数组吗 #包括 #包括 #定义ARSZ 32 void displayBinary(无符号长*,整数); 无符号长init32(); 无符号长行[ARSZ]; 内部主(空){ i

我的任务是用标准C语言编写《生活的游戏》。我只能使用1D数组。我的第一个问题是尝试用随机的32位二进制数字填充数组。我试着编写代码来实现这一点(我的老师提供的代码根本没有注释,所以在某种程度上我不知道我在做什么)。当我尝试显示数组的内容时,似乎每个索引的值都是相同的。你们能帮我用32个随机二进制数字(32位长度)填充我的数组吗

#包括
#包括
#定义ARSZ 32
void displayBinary(无符号长*,整数);
无符号长init32();
无符号长行[ARSZ];
内部主(空){
int i,j;
对于(i=0;i=1)!=0);
}
无符号长init32(){
无符号长init32;
srand(时间(空));
init32=((双)rand()/rand_MAX)*0xFFFFFFFF;
返回init32;
}

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

粗略地看一下伪随机数生成器在C语言中是如何工作的,这将是有意义的。

1)重复调用
srand(time(NULL))
。不要在
init32()
中调用
srand()
,而是在
main()
中调用它一次@艾伯特·迈尔斯

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

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

init32看起来您已经在填充它了,您正在寻找代码的解释吗?将该调用从函数中取出,并在
main()
顶部调用它一次。除非您认真了解自己在做什么,否则每次进程运行时,该函数的调用次数不应超过一次。多次调用
srand()
是可以的,但是如果
init32
每秒调用超过一次,则种子可能是相同的值(使用
time(NULL)
)时,会给出相同的数字序列。在这种情况下,它将每秒被调用多次,并给出重复的值。@CairnO。除非专门使用
srand()
进行种子设定以从生成器生成特定序列,否则将其称为“多次”完全违背了生成器背后的算法及其周期重复的目的。做得越多,RNG与播种序列的链接就越多,这是完全错误的。正如我所说,除非你真的知道自己在做什么,否则每个进程都应该调用
srand()
。我还应该提到另一件事。检查实现中的
RAND_MAX
值。如果你在Visual Studio C++平台上,我认为你不会喜欢你发现的。(上一次我检查它是0x7FFF,如果您试图生成大于15位的内容,这显然是一个很大的麻烦,而您确实是)。它现在可以工作了。就像你说的那样,我不得不停止重复的时间通话。
unsigned long init32;
init32 = rand();
init32 <<= 15;
init32 ^= rand();
init32 <<= 15;
init32 ^= rand();
// if pedantic
init32 &= 0xFFFFFFFFL;