### 基本數據類型
之前簡單介紹過整數類型,下面就詳細的介紹下其他的數據類型。
**char**
字符類型
這個數據類型一共包含了256個不同的整數,每個整數可以代表一個字符(例如: '^','1', 'a'等,兩個單引號包含的數據就是字符)。
這些字符和整數可以互相代替。
在ASCII表中包含了所有字符和整數之間的對應關系。
典型的幾個字符和整數的對應關系:
* 'a' -> 97
* 'A' -> 65
* '0' -> 48
ASCII碼表里所有小寫英文字母是連續排列的,字符'a'對應的整數最小,字符'z'對應的整數最大。
所有大寫英文字符和阿拉伯數字字符也符合這個規律。
ASCII中的字符是可以相互計算的。
'd' - 'a' == 'D' - 'A' == '3' - '0' == 3 - 0
ASCII中的字符被分成兩組,每組包含128個。
其中一組字符和整數的對應關系在所有計算機上都是一樣的,它們的對應的整數范圍是從 0 ~ 127。
另外一組字符和整數的對應關系在不同計算機上可能是不同的,這些字符對應的整數可能從-128到1也有可能從128到255。
常用的一些特殊字符:
'\n' 換行字符
'\r' 回車字符
'\\' \ 字符
'\'' ' 字符
'\"' " 字符
**short**
有符號短整數類型
它里面包含65535個整數,其中一半是負數,另外一半是非負數,以數字0為中心向兩邊擴展。
**long**
有符號長整數類型
它里面包含2的32次方個不同的整數,其中一半是負數,另外一半是非負數,以數字0為中心向兩邊擴展。
**int**
有符號整數類型
在我們自己計算機里整數類型和長整數類型是完全一樣的。也是2的32次方個不同的整數,其中一半是負數,另外一半是非負數,以數字0為中心向兩邊擴展。
上面的整數數據類型都是有符號數據類型,因為它們中包含的數字中有正有負。
每個有符號類型都有一個對應的無符號類型,無符號類型的名稱就是在對應有符號類型名稱前家unsigned。
無符號類型里只包含非負數,它們包含的數字個數和對應的有符號類型包含的個數是一樣的。
以上數據類型包含的數字范圍是互相重疊的。
程序中不帶小數點的數字后加u表示數字的類型是無符號整數類型。
**float**
C語言里使用浮點類型表示帶小數點的數字。
浮點類型分為單精度浮點類型和雙精度浮點類型。
雙精度浮點類型可以記錄更多小數點后面的數位。
單精度浮點類型名稱是:float
雙精度浮點類型名稱是:double
程序中帶小數點的數字默認是雙精度浮點類型。
如果在帶小數點的后面加上f表示數字類型是單精度浮點類型。
int a = 1.1f; // 單精度浮點類型
int b = 2.2; // 雙精度浮點類型
### 復合數據類型
C語言里可以擴展新的數據類型。
這些擴展出來的數據類型叫做復合數據類型
復合數據類型需要先定義然后才能使用
**bool**
布爾類型是C99規范引入的數據類型。
這個類型里只包含兩個整數,0和1, 0=False, 1=True。
在C89里是沒有專門的布爾值的,但是我們可以自己去定義的,將0當做布爾值中的假,其他所有整數當做布爾值中的真。
還有其他的復合數據類型,先不說,以后單獨介紹。
### 數據類型和占位符的對應關系
**整型**
char和unsigned char %c
short %hd
unsigned short %hu
long %ld
unsigned long %lu
int %d
unsigned int %u
**浮點類型**
float %f或%g
double %lf或者%lg
%f和%lf會保留小數點后面無效的0,但是%g和%lg不會保留