類型說明符基本概念
-
C 語言提供了一下四種說明符,四個都屬於關鍵字;
- short 短型 等價於 short int
- long 長型 等價於 long int
- signed 有符號型
- unsigned 無符號型
-
這些說明符一般就是用來修飾 int 類型的,所以在使用時可以省略 int
short和 long
-
short 和 long 可以提供不同長度的整型數,也就是可以概念整型數的取值范圍
- 在 64 位編譯器下,int 占用 4 個字節(32bit),取值范圍是-2 ** 31~2 ** 31-1
- short占用 2 個字節(16bit),取值范圍是-2 ** 15~2 ** 15-1
- long 占用 8 個字節(64bit),取值范圍是-2 ** 63~2 ** 63-1
-
總結一下,在 64 位編譯器下
- short 占 2 個字節
- int 占 4 個字節
- long 占 8 個字節
- 因此如果使用的整數不是很大的話可以使用 short 代替 int,這樣的話可以節省內存開銷
int main(int argc, const char * argv[]) {
/*
short 2 個字節
int 4 個字節
long 8 個字節
long long 8個字節
*/
int num = 123456789999;
printf("使用int 來輸出;%i\n",num); // -1097261585
// C語言中不看怎么存,只看怎么取
long num1 = 123456789999;
printf("使用int 來輸出;%li\n",num1); // 123456789999 使用%li 或者 %ld 輸出
long long num2 = 123456789999;
printf("使用int 來輸出;%li\n",num2);
// long long 和 long 的區別
// 在 64 位的編譯器下沒有區別,在 32 位的編譯器下 long long占 8 個字節,long 占 4個字節
return 0;
}
- 如果要輸出 short int 的話使用%hi 或者%hd 輸出
unsigned 和 signed
- unsigned 無符號修飾
- signed 有符號修飾
/*
signed
unsigned
*/
// 如果給變量前面加上 signed 修飾符的話,代表當前變量的取值范圍是正數,負數,零
// 就代表把二進制的最高位作為符號位,默認是有 signed 的修飾的
signed int num = 9;
// 如果給變量前面加上了 unsigned 修飾符的話,代表當前變量的取值范圍只能是正數和零
// 如果想打印無符號的變量要使用%u 進行輸出
// 代表不把二進制的最高位w作為符號位,
unsigned int num1 = -11; // 4294967285,可以正常輸出零,正數
printf("num1 前面加了 unsigned 進行修飾:%u\n",num1);
return 0;
不同類型的說明符可以混合使用
// 混合使用
// 相同類型不能在一起使用
long unsigned int num = 111111111111111199;
printf("混合使用輸出:%lu\n",num);
// 輸出 long 使用%l
// 輸出 short 使用%h
// 輸出 long long 使用%ll
// 輸出 signed 默認就是 signed,使用%i
// 輸出 unsigned 使用%u 輸出