C语言中数据类型可容纳数值的范围
在c语言中,仅由4中基本数据类型----整形、浮点型、指针和聚合类型(如数组和结构等)。所有其他的类型都是从这4种基本类型的某种组合派生而来。首先让我们来介绍整形和浮点型。
1.1 整形家族
整形家族包括字符、短整型、整形和长整型,他们都分为有符号(signed)和无符号(unsigned)两种版本。
听上去“长整型”所能表示的值应该比“短整型”所能表示的值要大,但这个假设并不一定正确。规定整形值相互之间大小的规则很简单:长整型至少应该和整形一样长,而整形至少应该和短整型一样长。
K&R C:
注意,标准并没有规定长整型必须比短整型长,只是规定它不得比短整型短。ANSI标准加入了一个规范,说明了各种整形值的最小允许范围,如下表所示。当各个环境间的可移植问题非常重要时,这个规范较之 K&R C 就是一个巨大的进步,尤其是在那些机器的系统结构差别极大的环境里。
变量的最小范围
类型 | 最小范围 |
---|---|
char | 0到127 |
signed | -127到127 |
unsigned char | 0到255 |
short int | -32767到32767 |
unsigned short int | 0到65535 |
int | -32767到32767 |
long int | -2147483647到2147483647 |
unsigned long int | 0到4294967295 |
short int 至少16位,long int至少32位。至于缺省的int究竟是16位还是32位,或者其他值,则由编译器器设计者决定。通常这个缺省值是这种机器最为自然(高效)的位数。同时你还应该注意到标准也没规定这3个值必须不一样。如果某种机器的环境子长是32位,而且没有什么指令能够更有效的处理更短的整形值,它可能把这3个整形值设定为32位。