在C语言中将一个很大的正整数赋值给一个int类型变量a,输出a时有时会显示负值,为何?

 我来答
听不清啊
高粉答主

2016-05-31 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部
在不同的C系统中,int有盯野不同的表示范围。
32位(4字节)的int,它可以表示的数字范围是-2147483648~+ 2147483647,共可表示4294967296个不同的数。
这是因为它有点像我们用(每个档位上只可以表示0~9)的算盘。假如我们的一个算盘凯裂喊有4个档位,它能表示从0~9999共10000个不同的数字。当我们要把比9999更大的数字存放到算盘上时,走出的部分就“丢失”了。如果要存的数字是12345,按“老规矩”存放完毕后,读取算盘上的数字时,由于数据发生了丢失,只能读到2345。这是由于12345-10000=2345。

再来看计算机里的int,如果我们要把2147483648存入到int变量中时,由于超出了范围,就发生了丢源搭失。读取时,就变成了2147483648-4294967296=-2147483648了。
其它更大的数字,所变成的负数大小,也是这样的规律(都是减去了4294967296或它的倍)。
玩尼丶玛
推荐于2017-11-22 · 超过25用户采纳过TA的回答
知道答主
回答量:118
采纳率:0%
帮助的人:41.4万
展开全部
int 型只可以表示 —36768到+32767 这其实是一个逻辑圈,意思就是说如果逗世该数超过了最大表示范围那么就从头开始稿腔,举个例子吧 ,如 +32788超过了最大表示范围,比最大表示范围多1,那么该数其键指衫实就是-32768
追答
打字很累,望采纳。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
闪电麦昆王
2016-05-31 · TA获得超过836个赞
知道答主
回答量:137
采纳率:100%
帮助的人:39.9万
展开全部
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式