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