首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成10位有符号整数

生成10位有符号整数
EN

Stack Overflow用户
提问于 2013-10-25 12:10:00
回答 2查看 2.1K关注 0票数 0

这一行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位有符号整数?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-25 12:15:43

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

产生一个10位随机数,你将需要切换到64位--这么长;

代码语言:javascript
复制
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位整数的最高正值。

票数 1
EN

Stack Overflow用户

发布于 2013-10-25 12:16:15

它不适合于int32 (检查您的平台,看看int是如何定义的)

在无符号int32中,máximum值为2^32 = 4,294,967,296。因此,当您执行rand % 10000000000时,10000000000是一个long,因此%被计算为long操作(给出这种类型的结果)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19589509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档