前言
C标准
中并没有具体给出规定那个基本类型应该是多少字节数,而且这个也与机器、OS
、编译器有关,比如同样是在32bits
的操作系统系,VC++
的编译器下int
类型为占4个字节;而TuborC
下则是2个字节。
原则
所以int
,long int
,short int
的宽度都可能随编译器而异。但有几条铁定的原则(ANSI/ISO
制订的):
sizeof
(short int)<=sizeof(int)sizeof
(int)<=sizeof(long int)short int
至少应为16位(2字节)long int
至少应为32位。
编辑器位数
16位编译器
char
:1个字节
char*
(即指针变量): 2个字节
short int
: 2个字节
int
: 2个字节
unsigned int
: 2个字节
float
: 4个字节
double
: 8个字节
long
: 4个字节
long long
: 8个字节
unsigned long
: 4个字节
32位编译器
char
:1个字节
char*
(即指针变量): 4个字节(32位的寻址空间是2^32
, 即32个bit,也就是4个字节。同理64位编译器)
short int
: 2个字节
int
: 4个字节
unsigned int
: 4个字节
float
: 4个字节
double
: 8个字节
long
: 4个字节
long long
: 8个字节
unsigned long
: 4个字节
64位编译器
char
:1个字节
char*
(即指针变量): 8个字节
short int
: 2个字节
int
: 4个字节
unsigned int
: 4个字节
float
: 4个字节
double
: 8个字节
long
: 8个字节
long long
: 8个字节
unsigned long
: 8个字节
附录
C 中只提供了下列几种基本数据类型:
char
:字符型,占用一个字节,可以存放本地字符集中的一个字符
int
:整型,通常反映了所有机器中整数的最自然长度
float
:单精度浮点型
double
:双精度浮点型
此外,还可以在这些基本数据类型前面加上一些限定符。short
与long
两个限定符用于限定整型:
short int sh;
long int lh;
上述这种类型的声明中,关键字int
可以省略。
类型限定符signed
与unsigned
可用于限定char类型或任何整型。unsigned
类型的数总是正值或0,并遵守算术模2^n
定律,其中n是该类型占用的位数。如,char
对象占用8位,那么unsigned char类型变量的取值范围为0~255
,而signed char
类型变量的取值范围则为-128~127
(在采用对二的补码的机器上)。不带限定符的char
对象是否带符号则取决于具体机器,但可打印字符总是正数。
有关这些类型长度定义的符号常量以及其他与机器和编译器有关的属性可以在标准头文件<limits.h>
与<float.h>
中找到。