如何在C>;中生成8位随机数; intmain(){ uint8_t*wdata=NULL; wdata=calloc(5,sizeof(uint8_t)); 对于(int j=0;j
如何在C语言中生成8位随机数 给定代码,例如如何在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
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;
}
}