关于C语言中整型变量取值范围的问题

我知道C语言中整型变量在内存中分配两个字节,为什么不是2^-15到2^15
而是2^-15到2^15-1,各位帮我解释一下为什么还要减一呢

其实C语言标准并没有规定整型变量在内存中分配几个字节,根据不同的编译器是不同的,例如在visual c++6.0中就为整型变量分配4个字节的内存空间。
以两个字节为例,最大值的二进制为0111 1111 1111 1111,可以计算一下这个二进制的值,它实际上等于1000 0000 0000 0000-1,也就是2^15-1。
对于最小值呢,因为数据在内存中是以补码的方式存储的,它的最小值的二进制实际上是 1000 0000 0000 0000,可以实际判断一下,这是最小的负数,根据这个二进制数可以求出它的取反为 0111 1111 1111 1111,再加1为1000 0000 0000 0000,也就是-2^15。
不知道清楚不?
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-08-03
因为如果是两个字节的话,就是十六位二进制表示的。最大的十六位二进制就是十六个1,即1111 1111 1111 1111,这就是2^15-1啊。
顺便说一下,c语言中整型也不一定就是两个字节,这和你用的编译器有关系,比如我用的vc6.0中就是占四个字节。
我也在研究c语言,我有个c语言交流群,你可以家一下,是baidu hi的群。
群号是1171607,有任何问题欢迎来交流!
第2个回答  推荐于2017-11-23
虽然有16位,但最高位是符号位。最高位为1时说明是负数,为0时表示正数。
即最大的正数的而二进制数就是第一位是0后面15个1:011111111 11111111
对应的十进制数就是2^15-1,而其一为为1其余的全是0时即10000000 00000000表示最小的负数,十进制就是2^-15本回答被提问者采纳
第3个回答  2010-08-03
0也算正数范围内,所以减一,而且现在的机子中貌似int为4字节。c只是规定int不少于16位,但现在的都是32位的编译器,所以int一般为4字节了
相似回答