为什么int型的范围是-32768~32767?这个范围是这么得出来的?解决方法

为什么int型的范围是-32768~32767?这个范围是这么得出来的?
不少书讲这个问题时不很透彻..
到现在我还一直一知半解的..

只知道int是16位有符号数,怎么得出其表示的范围???

个人的理解:首先看正数,符号为为0,那么最大数的原码应该是:0111,1111,1111,1111即32767
同理最小的负数应该是-32767....
那为什么最小的负数是-32768??怎么得出来的?

谢谢大家

------解决方案--------------------
补码表示。
------解决方案--------------------


负数正数一样多,但正数多了个 0


比如当只有2bit时候



00 0
01 1



11 -1
10 -2


------解决方案--------------------
在内存里都是用补码来表示的,所以要看补码的形式,对于0要特殊考虑
------解决方案--------------------
你去看看原码,补码的资料吧,计算机里储存的都是以补码形式存在的,假设INT是16位的,10^16(最高位是1,其它位是0)正好是负数
-10^16的补码形式,而正数最大只能是10^16-1(最高位是0,其它位是1,正数补码与原码相同)
------解决方案--------------------
-0就是-32768
------解决方案--------------------
你这样吧,你先看看char 型的表示范围,他是从-128~127
正好255个数字,正好一个字节
你得弄清楚几个概念,二进制,十进制,他们之间怎么转换的
再弄明白什么是二进制原码,补码表示,你到网上到处都是,你找的那个就是补码的

用补码的原因就是计算机可以把减法当加法算.



------解决方案--------------------
内存里都是二进制表示,而且都是用补码来表示的,每一个数的最高位是符号位,0表示正数,1表示负数,对于补码,正数的补码是本身,负数的补码是原码按位取反,然后加一,这样的话,正数的32678用二进制表示成10000000,00000000,这时最高位是一,所以认为是负数,所以代表-0而不是+32678,这样的话有两个0,那么正数也自然少一个了~~不知说的清不清楚
------解决方案--------------------
他可能问的是这个范围怎么算的。
这个和计算机的字长有关,现在一般都32位机,字长就是32位,也有大量用64位CPU的,字长就是64
------解决方案--------------------
用二进制补码表示数的时候,除符号位之外,其它位全为0时,应该都表示0,所以,补码就有+0与-0之说,如果就按照这样表示的话,那么,计算机处理的数的范围(16位)就是: -32767~+32767,并且,0有两个,即+0和-0,有两个0,对计算机来说,不好处理.为了更好的处理这些数,就必须让其中一个0不再表示0,使0有惟一表示.根据符号位的定义,-0的符号位为1,应该表示负数更为合理,所以就规定,表示-32768.
这么说应该好理解一些了吧?
------解决方案--------------------
这是16位机器上的int范围 -2^15 < i <2^15-1
32位机器是 -2^31 < i <2^31-1

------解决方案--------------------
panlong1987和Turntogo同志说的很清晰,鼓掌
------解决方案--------------------
int一般是32位,-2^32就是最小负数,2^32-1就是最大正数
考虑8位情况00----ff(hex),也就是00000000(10进制0)----11111111(bin)<10进制255>
它一共能直接表示的数值个数是2^8=256个,非负数:0-127(ff hex)<128个>,负数-1~-128<128个>
于是8位的范围就是-128~127 (-128,-127....-1,0,1,2,....127 <total 256>)
注意01111111,这是8位中最大正数,0是符号位,那么显然能表示的最大正数是7F(hex)=127,还有一个0,剩下的就是负数,
256-1-127=128个,就是-1~-128

同理,n位整型范围是-2^n~~~2^n-1

罗嗦了点,同样建议楼主还是好好看基础书吧
------解决方案--------------------
汗:错了,太错了:

int数据类型在32位机器中多数是用32位二进制表示的,而2的32次方就是4294967296,即它最多能表示4294967296个不同的数,第一位表示符号之后,就只能表示一半的数了. 
如果是64位机器,int数据类型可能是64位的(这由编译器决定),就可以表示多达18446744073709551615个不同的数了,即可以表示有符号数的范围是: 
-9223372036854775808 ~ 9223372036854775807 够大吧?
------解决方案--------------------
这是二进制补码来算的.不是人为定义 的.