这一行printf ("Random[%d]= %u\n", i, rand ());生成一个随机整数,大部分为1位,但是在执行printf ("Random[%d]= %u\n", i, rand ()%1000000);时,它生成6位int,
当试图生成10位int时,错误“警告: format‘%u’预期参数类型为‘unsigned int’,但参数3的类型是‘long int’-Wformat”。
那么,有没有办法产生一个随机的10位有符号整数?
发布于 2013-10-25 12:15:43
您会显式地或隐式地将sa "long long“或"unsigned 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;您收到的警告是因为您将long long类型的值作为第三个参数传递给printf函数,但是您仍然使用"%u"作为格式,这使得printf需要一个unsigned int类型的值。
若要使警告保持沉默,请将格式更改为"%lld"。
不过,它不会帮助您创建一个比2147483647高出10位数的数字,因为rand返回的int最多为32位,甚至在64位平台上也是如此。2147483647值从何而来?如果有符号的32位整数的最高正值。
发布于 2013-10-25 12:16:15
它不适合于int32 (检查您的平台,看看int是如何定义的)
在无符号int32中,máximum值为2^32 = 4,294,967,296。因此,当您执行rand % 10000000000时,10000000000是一个long,因此%被计算为long操作(给出这种类型的结果)。
https://stackoverflow.com/questions/19589509
复制相似问题