1,int 是 C 語言的基本整數類型,能夠知足咱們處理通常數據的需求。
C 語言還提供了四個能夠修飾 int 的關鍵字:short、long、signed,以及 unsigned。
利用這四個關鍵字,C 語言標準定義瞭如下整數類型:
名稱 |
全稱類型說明符 |
縮寫類型說明符 |
位數 |
範圍 |
整型 |
int |
int |
16位 |
-32768至+32767 |
無符號整型 |
unsigned int |
unsigned |
16位 |
0 至 65,535 |
短整型 |
short int |
short |
16位 |
-32768至+32767 |
無符號短整型 |
unsigned short int |
unsigned short |
16位 |
0 至 65,535 |
長整型 |
long int |
long |
32位 |
-2,147,483,648 至 2,147,483,647 |
無符號長整型 |
unsigned long int |
unsigned long |
32位 |
0至4,294,967,295 |
2. 聲明方式
這些整數類型的聲明方式與 int 類型的聲明方式同樣。例如:
long int estine;
long johns;
short int erns;
short ribs;
unsigned int s_count;
unsigned players;
unsigned long headcount;
unsigned short yesvotes;
long long ago; /* C99 特有 */
unsigned long long ego; /* C99 特有 */
若是編譯器不支持 C99 標準,那就不能使用 long long 和 unsigned long long。
3. 整數類型的選擇
若是處理的只是非負整數,那麼應該優先使用 unsigned 打頭的那些整數類型。
若是處理的整數超出了 int 所能表示的範圍,而且編譯器中,long 的表示範圍比 int 大,那就使用 long。
不過,若非必要,儘可能不要用 long,由於它可能會下降程序運行效率。
有一點要注意:若是編譯器中,long 和 int 都是 32 位的,而且您須要使用 32 位整數,那麼應該用 long,而不要用 int。
只有這樣,程序才能夠安全地移植到 16 位的計算機,由於 16 位的計算機中,int 通常也是 16 位的。
相似地,若是要使用 64 位整數,那就用 long long。
若是 int 是 32 位的話,那麼使用 short 能夠節省空間,不過得確保您要處理的整數不會超出 short 的表示範圍。這種「節省」對內存大的計算機來講,是沒什麼意義的。
4. long 型常量和 long long 型常量
通常來講,整數常量是被看成 int 類型來存儲的。
若是使用的整數常量超出了 int 的表示範圍,C 語言規定編譯器自動使用 unsigned int 來處理這個常量。
若是 unsigned 也不足以表示這個常量的話,編譯器就會用 long。
若是還表示不了的話,那就依次用 unsigned long,long long,unsigned long long。
若是 unsigned long long 也表示不了,那麼編譯器就沒轍了。
注意:long long 和 unsigned long long 是 C99 特有的。
例如:若是 int 是 16 位的話,它就表示不了常量 1000000。編譯器會使用 long 來處理這個常量,由於 unsigned int 也表示不了 1000000 。
一樣,十六進制和八進制整數常量一般也是被做爲 int 來處理。可是,當咱們使用的常量超出了 int 的表示範圍後,編譯器會依次使用unsigned int,long,unsigned long,long long 和 unsigned long long。直到所使用的類型足以表示那個常量爲止。
有時,使用的是較小的常量,可是但願這個常量被看成 long 來處理,這就須要在這個常量後面加上後綴 l(小寫字母 l)或者 L(大寫字母 L)。
應該避免使用 l ,由於 l 容易和數字 1 混淆。
例如:整數常量 7 是被做爲 int 來處理的,但整數常量 7L(或者 7l)是被做爲 long 來處理的。
相似地,在整數常量後面加上後綴 ll 或者 LL ,這個常量就會被看成 long long 來處理。
例如:3LL 。若是想使用無符號整數常量的話,還要配合使用後綴 u 或者 U 。
例如:2u,3U,4Lu,5ul,6LU,7LLU,8Ull,9uLL 。 這些後綴也能夠用於十六進制和八進制整數常量。例如:020L,010LL,0x30uL,0x40ull。