C语言中int越界变正还是变负,最小越界变正,最大越界变负为什么?最小值:当int型的数据到了最小值时,然后再减1(即越界时),它会变成正数,如果此时再将此数值加1,就可以知道这最小值是多

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/09 12:38:35
C语言中int越界变正还是变负,最小越界变正,最大越界变负为什么?最小值:当int型的数据到了最小值时,然后再减1(即越界时),它会变成正数,如果此时再将此数值加1,就可以知道这最小值是多

C语言中int越界变正还是变负,最小越界变正,最大越界变负为什么?最小值:当int型的数据到了最小值时,然后再减1(即越界时),它会变成正数,如果此时再将此数值加1,就可以知道这最小值是多
C语言中int越界变正还是变负,最小越界变正,最大越界变负为什么?
最小值:当int型的数据到了最小值时,然后再减1(即越界时),它会变成正数,
如果此时再将此数值加1,就可以知道这最小值是多少了.
最大值:同理,当int型的数据到了最大值时,然后再加1(即越界时),它会变成负数,
如果此时再将此数值减1,就可以知道这最大值是多少了.

C语言中int越界变正还是变负,最小越界变正,最大越界变负为什么?最小值:当int型的数据到了最小值时,然后再减1(即越界时),它会变成正数,如果此时再将此数值加1,就可以知道这最小值是多
以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