在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位
 
 
 
 
 
 
  
 
    
05-11 11:09