在C语言中将一个很大的正整数赋值给一个int类型变量a,输出a时有时会显示负值,为何?
3个回答
展开全部
在不同的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或它的倍)。
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或它的倍)。
展开全部
int 型只可以表示 —36768到+32767 这其实是一个逻辑圈,意思就是说如果逗世该数超过了最大表示范围那么就从头开始稿腔,举个例子吧 ,如 +32788超过了最大表示范围,比最大表示范围多1,那么该数其键指衫实就是-32768
追答
打字很累,望采纳。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
额
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询