c语言中整型数据的取值范围是怎么确定的???

如题所述

这个你要明白整型在计算机中的存储原理--补码形式存储,举一个类吧,short 所占位数是16位,即

其中要说明的是最大整数 (0111111111111111)计算方法

0111111111111111 即相当于16进制的7FFF,转换为10进制后是 32767

 

最大负数:1000000000000000,由于最高位是1,判断为负数,用求补码的原理,按位求反+1

即 反码 0111111111111111  补码 100000000000000   转换为10进制 32768  补回符号

-32768

 

其它的同样计算

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-08
对于无符号数,比较简单,根据占用的位数可以直接计算:
unsigned short 16位 0~2的16次方-1(即65535)
unsigned int 16位 0~2的16次方-1(即65535)
unsigned long 32位 0~2的32次方-1(即4294967295)

对于有符号数,由于符号位占用一位,并且负数要用补码表示
以8位数据为例:2进制的11111111表示-1,10000000表示-128,所以负数范围-128~-1;2进制00000000表示0,01111111表示127,所以正数范围0~127。合起来就是-128~127,找一下规律发现是- 2的(8-1)次方~2的(8-1)次方-1,那么就可以得到任何位数的范围:
short 16位 - 2的(16-1)次方~2的(16-1)次方-1(即-32768~32767)
int 16位 - 2的(16-1)次方~2的(16-1)次方-1(即-32768~32767)
long 32位 - 2的(32-1)次方~2的(32-1)次方-1(即-2147483648~2147483648)本回答被提问者采纳
第2个回答  2013-10-18
看存储空间和表示形式啊,补码还是原码。