在C语言中,可以把 字符型、短整形、整形、长整形都看作是整形,同属于整形家族这个大类型。 这些类型的大小,默认是否有符号等一些知识点较零散,较容易混淆,所以特地整理如下。   一 类型存储字节长度说明   字符型(char): C语言规定长度是8位,占一个字节。   短整、整形、长整型之间的关系则是:    长整形至少和整形一样长,整形至少和短整形一样长。   sizeof(long int) >= sizeof(int) >=sizeof(short int)   短整形、整形、长整形的长度(占几个字节)C语言标准是未明确规定的, 由编译器实现决定。   二 是否有符号说明 字符型(char),C语言标准未规定默认是signed还是unsigned signed,由编译器实现决定。 短整形、整形、长整形则C语言标准明确规定默认是signed的。C语言标准中明确规定除了char类型外, 如果不明确写明signed或unsigned 关键字都表示是signed。 例如  int n1; //n1肯定是有符号类型的整数。 肯定是 signed int n1。          char ch1; //根据编译器的实现而定,ch1有可能是signed char, 也有可能是unsigne char 。 综上所述,signed 一般用在char类型声明上,其他类型默认都是signed类型的。   三 整形声明的省略写法 short  long  signed  unsigned 这些是用于修改变量长度和符号的关键字。 在声明整形变量时,如果声明中已经有有了以上4个关键字声明符,关键字int可以省略。 例如 unsigned short int   a; 等同于  unsigned short a ; short == signed short ==short int == signed short int 。 int == signed int == signed   long == long int == signed long == signed long int   unsigned short == unsigned short int unsigned int  == unsigned unsigned long == unsigned long int   四 实际常用编译器实现规范 虽然各编译器对于整形的具体实现不相同,但通常实现都遵从ILP32或LP64规范。 ILP32的含义是 I(Integer),L(Long), P(Pointer)是32位,意思是整形、长整形、指针都是4字节、32位。32位计算机采用该规范。 LP64 的含义是 L(Long), P(Pointer)是64位,8字节。通常64位计算机采用该规范。 编译器规范具体实现如下:      
   类型 ILP32 LP32
char  8位 8位
short 16位 16位
int  32位 32位
long  32位 64位
long long 64位 64位
指针 32位 64位
double 64位 64位
                     
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄