0

此行printf ("Random[%d]= %u\n", i, rand ());生成一个随机整数,大部分为 1 位,但在执行 printf("Random[%d]= %u\n", i, rand ()%1000000);时会生成 6 位整数,

当试图生成一个 10 位整数时,会出现错误“警告:格式 '%u' 需要 'unsigned int' 类型的参数,但参数 3 的类型为 'long long int' [-Wformat]”。

那么有没有办法生成一个随机的 10 位有符号整数???

4

2 回答 2

1

您将显式或隐式地将 sa “long long”或“unsigned long long”传递给 printf,这就是您收到警告的原因——但稍后会详细介绍;

生成一个 10 位随机数,你需要切换到 64 位——这么久;

unsigned long long randomvalue;
randomvalue = random();
randomvalue <<= 16; // just picked 16 at random
randomvalue ^= random();  // you could also use + but not "or";
randomvalue %= 10000000000ULL;

您收到的警告是因为您将 type 的值long long作为第三个参数传递给printf函数,但您仍然使用"%u"格式,这使得printfexpect 的值是 type unsigned int

要使警告静音,请将格式更改为"%lld".

它不会帮助您创建一个比2147483647虽然高的十位数字,因为rand返回一个int到目前为止最多为 32 位的数字,即使在 64 位平台上也是如此。价值2147483647从何而来?如果是带符号的 32 位整数,则为最大正值。

于 2013-10-25T12:15:43.273 回答
1

它不适合 int32(检查您的平台以了解如何int定义)

在无符号 int32 中,最大值为 2^32 = 4,294,967,296。因此,当您这样做时rand % 1000000000010000000000是否将longso%计算为long操作(给出这种类型的结果)

于 2013-10-25T12:16:15.617 回答