字符类型
编码
char类型采用ASCII编码,占1个字节,只用了7位(最高位是0),能表示128个字符。
需要记忆的:
- 空字符 '\0' = 0
- ' ' = 32
- '0' = 48
- 'A' = 65
- 'a' = 97
转义序列
字符转义序列
数字转义序列
- 八进制:以 \ 开头,后面最多接三个八进制数
- 十六进制:以 \x 开头,后面接十六进制数
字符处理函数
读写字符类型
-
scanf/printf,配合%c来读写,%c匹配一个字符
-
getchar()/putchar()
int getchar(void) 函数从 stdin 上读取下一个可用的字符,并把它返回为一个整数。这个函数在同一个时间内只会读取一个单一的字符。您可以在循环内使用这个方法,以便从屏幕上读取多个字符。
int putchar(int c) 函数把字符输出到 stdout,并返回相同的字符。这个函数在同一个时间内只会输出一个单一的字符。您可以在循环内使用这个方法,以便在屏幕上输出多个字符。
getchar和putchar的效率远高于printf和scanf,如果只是读写字符数据,建议使用getchar和putchar。
布尔类型
C99引入布尔类型,定义在<stdbool.h>中
布尔值转换为整数
- false --> 0
- true --> 1
整数转换为布尔值
- 0 --> false
- 非0 --> true
类型转换
1、为什么要进行类型转换?
答:计算机硬件做计算时,要求操作数有相同的位数(相同类型)
2、什么时候会发生类型转换?
答:给定的类型和需要的类型不一致时,就会发生类型转换
3、如何进行类型转换?
答:隐式类型转换、显式类型转换
隐式类型转换
有符号数与无符号数进行运算时,有符号数会隐式转换为无符号数,故不要将有符号数和无符号数一起参与运算!
显式类型转换
格式:(目标类型) 表达式;
示例:
// 1.计算浮点数的小数部分
double d = 3.14159;
double fraction = d - (int)d;
// 2.提高代码可读性
float f = 3.14f;
//...
int i = (int)f; //注意这里发生了类型转换,可能会出现问题
// 3.对类型转换进行更精确的控制
int dividend = 4, divisor = 3;
double quotient = 0;
quotient = (double)dividend/divisor;
// 4.可以避免溢出
long long a = 24 * 60 *60 * 1000;
long long b = (long long)24 * 60 *60 * 1000 * 1000 * 1000;
printf("b/a = %lld\n", b / a);
sizeof运算符
作用:计算某一类型数据所占的字节数
格式:sizeof(类型)
注意:sizeof是在编译阶段进行运算的
typedef
作用:给类型起别名
格式:typedef 类型 别名;
为什么要给类型起别名?
答:提高代码可读性、提高代码可移植性
注意:
#define int BOOL //预处理后就没有别名了,编译器无法给出精确的报错信息
typedef int BOOL;