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

如题所述

在不同的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或它的倍)。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-22
int 型只可以表示 —36768到+32767 这其实是一个逻辑圈,意思就是说如果该数超过了最大表示范围那么就从头开始,举个例子吧 ,如 +32788超过了最大表示范围,比最大表示范围多1,那么该数其实就是-32768追答

打字很累,望采纳。

本回答被提问者采纳
第2个回答  2016-05-31
相似回答