作业帮 > 综合 > 作业

C语言中int越界变正还是变负,最小越界变正,最大越界变负为什么?

来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/06/03 17:55:07
C语言中int越界变正还是变负,最小越界变正,最大越界变负为什么?
最小值:当int型的数据到了最小值时,然后再减1(即越界时),它会变成正数,
如果此时再将此数值加1,就可以知道这最小值是多少了.
最大值:同理,当int型的数据到了最大值时,然后再加1(即越界时),它会变成负数,
如果此时再将此数值减1,就可以知道这最大值是多少了.
C语言中int越界变正还是变负,最小越界变正,最大越界变负为什么?
以16位int为例说明.
首先你要明白,在内存中存放的数都是补码.
最小的数是-32768,补码是1000,0000,0000,0000.-1的补码是1111,1111,1111,1111
-32768-1=[-32768]+[-1]=1000,0000,0000,0000+1111,1111,1111,1111=0111,1111,1111,1111
=32767
最大值是32767,补码是0111,1111,1111,1111.1的补码是0000,0000,0000,0001
32767+1=0111,1111,1111,1111+0000,0000,0000,0001=1000,0000,0000,0000
=-32768