如何在C语言中生成12位随机数?
我试图用C语言生成12位随机数,但它总是生成10位数字如何在C语言中生成12位随机数?,c,random,C,Random,我试图用C语言生成12位随机数,但它总是生成10位数字 #include <stdio.h> #include <time.h> #include <stdlib.h> void main() { srand(time(NULL)); long r = rand(); r = r*100; printf("%ld",r); } #包括 #包括 #包括 void main() { srand(时间(空)); 长r=rand(); r=
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void main()
{
srand(time(NULL));
long r = rand();
r = r*100;
printf("%ld",r);
}
#包括
#包括
#包括
void main()
{
srand(时间(空));
长r=rand();
r=r*100;
printf(“%ld”,r);
}
的结果,这意味着您无法直接从中获取12位数字
如果您需要始终为12位的值,则需要确保值适合特定范围
下面的示例假设您只需要将其中一些数字设置为12位—您只需要8个额外的位—因此,移位和或运算结果将生成0x7FFFFFFFFFFF-0范围内的数字,当打印为十进制时,该数字通常最多输出12位:
r = rand();
r = (r << 8) | rand();
r=rand();
r=(rrand()
返回int
值,范围为[0…rand\u MAX]
根据C规范,RAND_MAX>=32767
和RAND_MAX包括
#包括
int main()
{
inti,n;
时间;
n=5;
/*初始化随机数生成器整数范围*/
srand((未签名)时间(&t));
/*从50到背面打印5个随机数
对于(i=0;i
请缩进您的代码。您知道12位数字不适合32位,因此请开始在您的平台上检查long
类型的长度。叹气……如果long
类型为32位(在许多平台上都是如此),则无法将12位数字放入长的。您在哪个平台上,使用哪个编译器?非常奇怪的是,显示的代码“总是生成10位数字”…我希望值字符串为100以上(3-12位),总是以00结尾(这不是很随机)Windows上的@kulst gcc也遵循Windows惯例,使用32位long
。在32位Linux上long
也是32位类型。请说明您所在的平台。未签名的long可以达到4294967295。long可以达到2147483647,这是10位数字。您需要“构造”您自己输入一个12位数字,因为您的最大结果最多只能达到10位(受rand函数的返回类型限制)。(r我的重点是问题的原因和解决方法。谢谢你的建议,我会记住它。@Gnqz无符号长可以达到4294967295。长可以达到2147483647
不正确的.C标准。这取决于编译器的实现。而且int
可以有超过32位,所以绝对可以存储一个12位数字。这也取决于编译器的实现,但r=rand();r=(r你在做什么?打印一个0到32767之间的数字怎么样?rand()%50
rand将打印一个5位数的数字,与你希望它返回或向前的位置不同,如上所述(50,45,40,35…)它与OP的问题有什么关系?您的程序甚至不会生成大于等于50的数字
unsigned long long rand_atleast12digit(void) {
unsigned long long r = rand();
#if RAND_MAX >= 999999999999
#elif RAND_MAX >= 999999
r *= RAND_MAX + 1ull;
r += rand();
#else
r *= RAND_MAX + 1ull;
r += rand();
r *= RAND_MAX + 1ull;
r += rand();
#endif
return r;
}
#if RAND_MAX >= 999999999999
#define R12DIGIT_DIVISOR (RAND_MAX/1000000000000)
#elif RAND_MAX >= 999999
#define RAND_MAX_P1 (RAND_MAX+1LLU)
#define R12DIGIT_DIVISOR ((RAND_MAX_P1*RAND_MAX_P1-1)/1000000000000)
#else
#define RAND_MAX_P1 (RAND_MAX+1LLU)
#define R12DIGIT_DIVISOR ((RAND_MAX_P1*RAND_MAX_P1*RAND_MAX_P1-1)/1000000000000)
#endif
unsigned long long rand_12digit(void) {
unsigned long long retval;
do {
retval = rand_atleast12digit() / R12DIGIT_DIVISOR;
} while (retval == 1000000000000);
return retval;
}
long r = rand();
r = r*100;
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, n;
time_t t;
n = 5;
/* Intializes random number generator int range */
srand((unsigned) time(&t));
/* Print 5 random numbers from 50 to back
for( i = 0 ; i < n ; i++ )
{
printf("%d\n", rand() % 50);
}
return(0);
}