### 基本数据类型
之前简单介绍过整数类型,下面就详细的介绍下其他的数据类型。
**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不会保留