1、整數類型
1.1 類型
類型 | 位數 |
---|---|
short(或short int) | 16位 |
int | 16位或32位 |
long (或long int) | 32位 |
long long(或long long int) | 64位 |
注意:
(1)如果在long類型等於int類型的系統中編寫代碼,當確實需要32位整數是,應使用long類型,以便使程序移植到int類型爲16位的機器上後仍然可以正常工作。
(2)通常,數字常量以int類型存儲,如果使用1000000這樣的數字int類型不能表示時,編譯器會視其爲long int類型,如果仍然不夠,會視其爲long long int類型。
(3)如果希望把一個數字常量作爲long類型對待,可以使用‘l’或‘L’後綴。使用’L’後綴是更好的選擇,因爲‘l’與數字1很相近。
(4)與之類似,可以使用‘ll’或者‘LL’後綴標識long long類型。
1.2 數制
數制 | 表示方法 |
---|---|
八進制 | 前綴‘0’ |
十進制 | 無前綴 |
十六進制 | 前綴‘0x’或者‘0X’ |
這種使用不同數制系統的選擇是爲了方便而提供的,它並不影響數字的存儲。無論16、020、0x10,計算機內部都是使用二進制編碼進行存儲。
2、字符類型
表示方法 | 例子 |
---|---|
單引號 | char ch = ‘A’; |
ASCII碼 | char ch = 65; |
轉義序列 | char ch = ‘\n’; |
反斜槓 +數字 | char ch = ‘\020’; |
注意:
(1)上述‘反斜槓 +數字’表示方法中,數字爲八進制或者十六進制,如果沒有用‘x’前綴,則爲八進制,
char ch1 = '\020';
char ch2 = '\20';
char ch3 = '\x10';
所以上述三個例子效果相同。
(2)C語言將字符常量視爲int類型存儲。
char grade = 65; \*對於ASCII,這是可以的;但這是一種不好的編程風格*\
char grade2 = 'A'; \*與上一條有類似的效果*\
char grade = 'FATE';
printf("%c", grade); //將打印出‘E’,因爲C將這四個獨立的8位
//ASCII碼存儲在一個32位的單元中。所以如果
//把這個字符常量賦給一個char變量,那麼只有
//最後8位會起作用。
(3)如果再轉義序列和其對應的ASCII碼之間做出選擇,應該使用轉義序列,因爲轉義字符更容易記憶,而且移植性更好。
(4)當需要使用數值編碼時,使用‘\032’而不是032。首先,‘\032’能更清晰的表達程序員表示一個字符編碼的意圖;其次,‘\032’這樣的轉義序列可以嵌入到C字符串中,比如字符串“hello!\007\n”中就嵌入了‘\007’。
3、浮點數類型
3.1 浮點類型
float:系統的基本浮點類型。至少能精確表示6位有效數字。
double:範圍(可能)更大的浮點類型。能表示比float類型更多的有效數字以及更大的指數。
long double:範圍(可能)更大的浮點類型。能表示比double類型更多的有效數字以及更大的指數。
3.2 表示方法
float a = -1.34E-12; //e或者E表示10的指數
float b = 2.23e21;
float c = 0xa.1fp10; //p或者P表示2的指數(十六進制表示法)
4、複數和虛數類型(用的不多,省略)
注意:
char類型肯定是1字節,因爲C把char類型的長度定義爲1個字節。所以在char類型長爲16位,double類型長爲64位的系統中,sizeof將報告double類型有4字節長。