在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位
|