为什么整形常量范围-32768到32767

为什么不是-32768-32768呢

这涉及到二进制表示问题,要彻底理解,你得知道二进制的“2的补码”表示法(two's complement)。现在只能简单给你说下,当二进制用“2的补码”表示时,其表示的十进制真值是
-[2^(N-1)]~[2^(N-1)]-1
其中N为二进制位数。你说的整型数(即C/C++中的short int类型)是用2字节即16位二进制表示的,表示范围是
-[2^(16-1)] ~ [2^(16-1)]-1

-(2^15)~(2^15)-1
所以是 -32768~+32767。
同理,长整型数(C/C++中的long int)用4字节即32位二进制表示,其十进制真值的范围是
-(2^31)~(2^31)-1
即 -2147482648~+2147482647。
“2的补码”表示法是如今计算机表示有符号数的通用表示法,其他表示法还有“1的补码”、“移码”表示、原码表示等,用不同的表示法时,其表示的十进制真值范围是不同的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-01-30
“-32768”中的32768+32767一定要等于65535,(有符号整形就能表示负数和正数/没符号整形只能表示正数。而整形表示的数的范围是65535个数字)
而“-32768~~~32767”之间一共由65535个数字,但你所说的“-32768~~~~32768”里面有65536个数字。

因此你数错了,特别是这些类型的题目,比如:数年份,数时间间隔,我以前经常数错,不过多数就没事。
第2个回答  2009-01-30
因为0x7FFF是32767 而0x8000就是-32768了 你打算让32768在哪儿呆着
第3个回答  2009-01-30
16位011111111111111第一位是符号位,这就是最大的整数了,当然是32768了
第4个回答  2009-01-30
0的存在
相似回答