Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.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>;中生成8位随机数; intmain(){ uint8_t*wdata=NULL; wdata=calloc(5,sizeof(uint8_t)); 对于(int j=0;j_C_Random_Types - Fatal编程技术网

如何在C>;中生成8位随机数; intmain(){ uint8_t*wdata=NULL; wdata=calloc(5,sizeof(uint8_t)); 对于(int j=0;j

如何在C>;中生成8位随机数; intmain(){ uint8_t*wdata=NULL; wdata=calloc(5,sizeof(uint8_t)); 对于(int j=0;j,c,random,types,C,Random,Types,如何在C语言中生成8位随机数 给定代码,例如 int main(){ uint8_t *wdata = NULL; wdata = calloc(5, sizeof(uint8_t)); for (int j =0;j<5;j++){ wdata[j] = rand(); } } 差不多 uint8_t *wdata = calloc( 5, sizeof( uint8_t ) ); for(int j=0;j

如何在C语言中生成8位随机数

给定代码,例如

int main(){

    uint8_t *wdata = NULL;
    wdata = calloc(5, sizeof(uint8_t));

    for (int j =0;j<5;j++){

        wdata[j] = rand();

    }

}
差不多

uint8_t *wdata = calloc( 5, sizeof( uint8_t ) );
for(int j=0;j<5;j++)
{
wdata[j]=rand();
}
会很好的

对无符号值的整数赋值将截断,这正是您想要的。请参阅


请注意,
RAND_MAX
由保证至少为32767,比8位“宽”,因此结果保证“填充”8位变量。

因为8位数字可以包含最大值
0
-
255
。因此,如果我除以
RAND()%256
,我们得到8位随机数

for ( int j = 0;j < 5; j++ )
{
    wdata[ j ] = rand();
}
intmain(){
uint8_t*wdata=NULL;
wdata=calloc(5,sizeof(uint8_t));

对于(int j=0;jSo rand返回16位,只需使用其中的8位,并丢弃其余的。您所得到的将分配由
rand()返回的16位值中最低有效的8位。
rand()的许多版本
将返回32位值,但这是一个单独的讨论。使用最低有效8位的唯一问题是它们可能不像您希望的那样随机-它们可能会通过各种随机性测试。这有多重要取决于您下一步要做什么。最有可能的情况是,您可以简单地使用显示的代码。失败t、 您可能需要一个比
rand()
@JonathanLeffler更好的伪随机数生成器(PRNG)。如果您以2的幂丢弃一些随机值,它仍然是随机性的均匀分布,不是吗?例如
rand()%16
rand()%32
rand()%64
,等等。请参阅,特别是其中的链接,如Marsaglia(sp?)的论文。@fiddling:如果rand是用.linear同余生成器实现的,那么rand%2i的周期是2i,这对于小的
i
来说不是非常随机的。因为它们是无符号8位数字,
rand()%256
rand()
生成相同的内容;不过,这可能对可读性有一些好处。rand(void)返回一个范围在0到RAND_MAX之间的伪随机数。RAND_MAX是一个常量,其默认值在不同的实现之间可能有所不同,但它被授予至少32767。是的,但是,。请参见。@NeilEdelman较差的PRNG是较差的PRNG,当模值远小于PRNG的最大结果时,模运算本身就不会执行d对结果有任何可测量的偏差。
  int main(){
    uint8_t *wdata = NULL;
    wdata = calloc(5, sizeof(uint8_t));
    for (int j =0;j<5;j++){
        wdata[j] = rand()%256;
   }
}